Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2010 14:26:37

pfc
От:
Зарегистрирован: 2010-04-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов метода предка класса.

Здравствуйте. У меня, наверное, глупый вопрос. Например, у меня есть класс MyClass и он от чего-то наследуется. Мне нужно вызвать конструктор его предка. Везде для этого пишут что-то вроде

super(MyClass, self).__init__(*args, **kwargs)
Вопрос. Почему нельзя написать так:
super(self.__class__, self).__init__(*args, **kwargs)
Разве это не лучше соответствует принципу DRY? Или есть какой-то смысл в дублировании названия? Или есть ситуации, когда второй вариант не будет работать, а первый будет?



Офлайн

#2 Сен. 14, 2010 14:35:47

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Вызов метода предка класса.

Можно просто писать:

super().__init__( *args, **kwargs )



Офлайн

#3 Сен. 14, 2010 14:53:45

pfc
От:
Зарегистрирован: 2010-04-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов метода предка класса.

Писать-то можно, только “super() takes at least 1 argument”.



Офлайн

#4 Сен. 14, 2010 15:17:57

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Вызов метода предка класса.

pfc
Или есть ситуации, когда второй вариант не будет работать, а первый будет?
Конечно есть.

Например при иерархии в три уровня будет бесконечная рекурсия…

pfc
Писать-то можно, только “super() takes at least 1 argument”.
В третьей версии работает.



Офлайн

#5 Сен. 15, 2010 10:32:43

pfc
От:
Зарегистрирован: 2010-04-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызов метода предка класса.

Ясно, спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version