Форум сайта python.su
0
class Employee: def __init__(self,name,salary=0): self.name = name self.salary = salary def giveRaise(self,percent): self.salary=self.salary + (self.salary*percent) def work(self): print (self.name, "does stuff") def __repr__(self): return "<Employee: name=%s, salary=%s>"%(self.name, self.salary) class Chef(Employee): def __init__(self,name): Employee.__init__(self.name,50000) def work(self): print(self.name,'makes food')
def __init__(self,name): Employee.__init__(self.name,50000) def work(self):
То-ли я пока писал все понял, то-ли еще больше запутался в этих обертках) Это типа мы берем __init__ у родителя чтобы что? Чтобы не писать еще раз объявление переменных в классе?
Офлайн
20
Все экземпляры Шефа будут иметь salary = 50000. То есть в данном случае мы хотим показать, что есть некое значение по умолчанию для этого класса.
Офлайн
568
Если в классе наследнике в методе не вызвать явно метод родителя, то все что в методе родителя происходило не произойдет в наследнике.
То есть в данном примере, если напишешь так
class Chef(Employee): def __init__(self,name): self.foo=5 def work(self): print(self.name,'makes food')
Офлайн
0
То возникнет ошибка, ибо никакого self.name у Chef нет, он появляется в ините родителя, поэтому нужно этот инит явно вызвать.
Офлайн
568
В этом и состоит смысл наследования
Офлайн