一尘不染

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

python

我有这样的代码:

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无限递归并导致堆栈溢出。我该如何解决?


阅读 192

收藏
2020-12-20

共1个答案

一尘不染

实例化C调用时B.__init__self.__class__仍然是C,因此super()调用将其带回B。

调用super()时,请直接使用类名。因此,在B中,请致电super(B, self),而不是super(self.__class__, self)(最好super(C, self)在C中使用)。在Python 3中,您可以仅使用不带参数的super()来实现同一目的

2020-12-20