如何避免super()的无限recursion?
我有这样的代码:
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按预期工作,但实例化Crecursion无限并导致堆栈溢出。 我该如何解决这个问题?
当实例化C调用B.__init__
, self.__class__
仍然是C,所以super()调用返回B.
当调用super()时,直接使用类名。 所以在B中,调用super(B, self)
,而不是super(self.__class__, self)
(并且在C中使用super(C, self)
)。 从Python 3开始,你可以使用super()而不用参数来实现同样的事情