Правильное использование 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(),

(Ну, на самом деле вы нарушите предел рекурсии и ошибку. Но в любом случае это проблема.)

Другие вопросы по тегам