Правильное использование super в Python - я должен ссылаться на имя класса явно?
class Foo(object):
def whee(self):
return 77
class Bar(Foo):
def whee(self):
return super(Bar, self).whee() + 1
class Baz(Foo):
def whee(self):
return super(self.__class__, self).whee() + 1
И то и другое Bar
а также Baz
вернуть тот же результат для whee()
, Я привык к синтаксису в Bar
, Есть ли причина, по которой я не должен использовать синтаксис в Baz
?
1 ответ
Решение
Есть ли причина, по которой я не должен использовать синтаксис в
Baz
?
Да, есть причина, по которой вы не должны использовать этот синтаксис. Если вы подкласс от Baz
, super()
вызов разрешится обратно в Baz.whee()
и вы застрянете в бесконечном цикле. Это также относится к синтаксису super(type(self), self).whee()
,
(Ну, на самом деле вы нарушите предел рекурсии и ошибку. Но в любом случае это проблема.)