Найти - Пользователи
Полная версия: Поясните пример из книги Лутца
Начало » Python для новичков » Поясните пример из книги Лутца
1
ankane
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')


Я не понимаю принципа использовать перегрузку __init__ новых экземплярах класса типа Chef. Что нам дает вот этот кусок
def __init__(self,name):
		Employee.__init__(self.name,50000)
	def work(self):

Объясните плз логику. Я понимаю что :
1.объявляем конструктор класса что даст текущему экземпляру и всем его наследникам Name
2.идем в родительский класс,и берем от туда функция объявления Name и указывавем зп в 50000
3 ????
Так что-ли? То-ли я пока писал все понял, то-ли еще больше запутался в этих обертках) Это типа мы берем __init__ у родителя чтобы что? Чтобы не писать еще раз объявление переменных в классе?
Soteric
Все экземпляры Шефа будут иметь salary = 50000. То есть в данном случае мы хотим показать, что есть некое значение по умолчанию для этого класса.
FishHook
Если в классе наследнике в методе не вызвать явно метод родителя, то все что в методе родителя происходило не произойдет в наследнике.

То есть в данном примере, если напишешь так

class Chef(Employee):
	def __init__(self,name):
		self.foo=5
	def work(self):
		print(self.name,'makes food')
То возникнет ошибка, ибо никакого self.name у Chef нет, он появляется в ините родителя, поэтому нужно этот инит явно вызвать.
ankane
То возникнет ошибка, ибо никакого self.name у Chef нет, он появляется в ините родителя, поэтому нужно этот инит явно вызвать.

Т.е. мы в родителе указали атрибуты по умолчанию. Но мы хотим чтобы к наследнике, уже существующие в родителе атрибуты, были по умолчанию модифицированы. И что-бы а) не наследовать дефолтные атрибуты родителя и б) не писать заново под каждый экземпляр свой инит, мы просто модифицируем в своем ините, инит родителя ?
FishHook
В этом и состоит смысл наследования
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB