关于python:如何使用super()避免无限递归?

How to avoid infinite recursion with super()?

我有这样的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
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无限循环并导致堆栈溢出。我怎么解决这个问题?


当实例化c调用B.__init__时,self.__class__仍将是c,因此super()调用将其返回到b。

调用super()时,直接使用类名。因此,在b中,称为super(B, self),而不是super(self.__class__, self)(为了更好地衡量,在c中使用super(C, self))。在Python3中,您可以使用super()而不带参数来实现相同的功能。