2015-11-24 2 views
0

Является новым для Python и изучает классы и объекты. Я создал класс, в нем определен несколько функций. Затем я создал другой класс и пытался наследовать от первого класса, но получил некоторую ошибку. Ошибка: класс CTC (зарплата): NameError: название 'Зарплата' не определенPython: Понимание наследования

Базовый класс:

class Salary: 

    monthly=0.00 
    name = "" 

    def __init__(self,name,monthly): 
     self.name = name 
     self.monthly = monthly 


    def display(self): 
     print("name: ", self.name, "Monthly Salary: ", self.monthly) 

производный класс:

class CTC(Salary): 

    tax=0.00 
    ctc=0.00 
    def __init__(self,name,monthly,tax): 
     Salary.__init__(self,name,monthly) 
     self.tax = tax 


    def calculateCTC(self): 
     yearly = monthly*12 
     totalTax= tax *12 
     ctc = yearly - totalTax 
     print("Total CTC: ", self.ctc) 

     obj = CTC("Rishi",28700.00,1295.00) 
     obj.display(self) 

Может кто-нибудь объяснит мне причину ошибки?

+0

пожалуйста исправить отступы .. –

+1

Вы импортировали базовый класс в классе CTC? – Poonuts

+0

У вас есть синтаксические ошибки в вашем классе зарплаты, а у вас отсутствует «:», а отступ неверен – Poonuts

ответ

1

Я сформировал ваш код, и он работает для меня.

class Salary: 

    monthly=0.00 
    name = "" 

    def __init__(self,name,monthly): 
     self.name = name 
     self.monthly = monthly 


    def display(self): 
     print("name: ", self.name, "Monthly Salary: ", self.monthly) 


class CTC(Salary): 

    tax=0.00 
    ctc=0.00 
    def __init__(self,name,monthly,tax): 
     Salary.__init__(self,name,monthly) 
     self.tax = tax 


    def calculateCTC(self): 
     yearly = monthly*12 
     totalTax= tax *12 
     ctc = yearly - totalTax 
     print("Total CTC: ", self.ctc) 

     obj = CTC("Rishi",28700.00,1295.00) 
     obj.display(self) 
+0

Используете ли вы тот же файл для встраивания обоих классов? Как я использую разные файлы –

+0

@ RISHI KHANNA Я в моем случае я использую один и тот же файл, если вам нравится, я буду использовать два файла для демонстрации. – Zety

+0

Понял, наконец. Спасибо за помощь :) –

-1

В отличие от Java, который заставляет разработчика размещать каждый class в каждом файле, Python более гибкий. В Python вы можете написать столько кода, сколько хотите в одном файле, что означает, что вы можете иметь оба своих class es в одном файле, без необходимости import. Дифференциал находится в import ing. Java не нуждается в вас в import любом из ваших файлов проекта, с другой стороны, Python требует от вас importчто-нибудь, которое находится во внешних пакетах, где бы они ни находились. Так что просто импортируйте Salary в файл с CTC.

+0

Да. просто хотел попробовать по-другому. Импортированная зарплата в CTC, но все равно не повезло –

+0

Вы просто «импортировали зарплату»? если это так, вам нужно сослаться на свой класс с помощью 'зарплата.Salary'. Тем не менее, вы можете напрямую импортировать класс с помощью «из зарплаты import Salary». Я предполагаю, что ваш файл называется «зарплата» – Nhor

+0

да Nhor..got ваша точка. теперь понял .. Спасибо –

2

Я поместил весь код в один файл (с незначительными модификациями), и он работает на меня.

class Salary: 

    def __init__(self, name, monthly): 
     self.name = name 
     self.monthly = monthly 

    def display(self): 
     print("name: ", self.name, "Monthly Salary: ", self.monthly) 


class CTC(Salary): 

    def __init__(self, name, monthly, tax): 
     Salary.__init__(self, name, monthly) 
     self.tax = tax 
     self.ctc = 0.00 # create with default value 

    def calculateCTC(self): 
     yearly = self.monthly*12 # with `self` 
     totalTax = self.tax*12 # with `self` 
     self.ctc = yearly - totalTax # with `self` 
     print("Total CTC: ", self.ctc) 

# without indentation 
obj = CTC("Rishi", 28700.00, 1295.00) 
obj.display() # without `self` 

, если вам это нужно в отделенных файлах

salary.py

class Salary: 

    def __init__(self, name, monthly): 
     self.name = name 
     self.monthly = monthly 

    def display(self): 
     print("name: ", self.name, "Monthly Salary: ", self.monthly) 

main.py

from salary import Salary 

class CTC(Salary): 

    def __init__(self, name, monthly, tax): 
     Salary.__init__(self, name, monthly) 
     self.tax = tax 
     self.ctc = 0.00 

    def calculateCTC(self): 
     yearly = self.monthly*12 # with `self` 
     totalTax = self.tax*12 # with `self` 
     self.ctc = yearly - totalTax # with `self` 
     print("Total CTC: ", self.ctc) 

# without indentation 
obj = CTC("Rishi", 28700.00, 1295.00) 
obj.display() # without `self` 
+0

Hi furas это сработало. Но все же я не мог понять, где я отсутствовал. –

+0

Кроме того, вы удалили все глобальные переменные. Если я пытаюсь вызвать calculateCTC после объявления глобальных переменных, он снова бросает ту же ошибку –

+0

@RISHIKHANNA На самом деле, он не удалил глобальные переменные при определении переменной с 'self', она будет в глобальной области видимости этого класса, а любая класс, полученный из этого класса. когда вы определяете переменную без ключевого слова 'self', переменная будет находиться только в локальной области. – Poonuts

Смежные вопросы