Как избежать бесконечной рекурсии с помощью super ()? - PullRequest
26 голосов
/ 21 ноября 2010

У меня есть такой код:

class A(object):
    def __init__(self):
          self.a = 1

class B(A):
    def __init__(self):
        self.b = 2
        super(self.__class__, self).__init__()

class C(B):
    def __init__(self):
        self.c = 3
        super(self.__class__, self).__init__()

Создание экземпляра B работает как положено, но создание экземпляра C повторяется бесконечно и вызывает переполнение стека. Как я могу решить это?

1 Ответ

48 голосов
/ 21 ноября 2010

При создании экземпляра C-вызовов B.__init__, self.__class__ все равно будет C, поэтому вызов super () возвращает его к B.

При вызове super () используйте имена классов напрямую.Так что в B, звоните super(B, self), а не super(self.__class__, self) (и для правильной меры, используйте super(C, self) в C).В Python 3 вы можете просто использовать super () без аргументов для достижения того же самого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...