如何避免使用super()进行无限递归?

时间:2010-11-20 21:22:34

标签: python oop multiple-inheritance super

我有这样的代码:

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 个答案:

答案 0 :(得分:48)

实例化C调用B.__init__时,self.__class__仍为C,因此super()调用会将其返回给B.

调用super()时,直接使用类名。因此,在B中,请致电super(B, self),而不是super(self.__class__, self)(并且在C中使用super(C, self)。从Python 3开始,您可以使用不带参数的super()来实现相同的功能