如何避免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()而不用参数来实现同样的事情