多重继承:意想不到的事情正在发生..?



我正在用python自学哎呀概念。我不小心在子类 C 的init方法中键入B().__init__()。这是代码。

class A:
def __init__(self):
print('A')
class B:
def __init__(self):
print('B')
class C(A,B):
def __init__(self):
print('C')
B().__init__()
c1 = C()

这是输出

C
B
B

为什么 B 被打印 2 次?

你在 C 的init(( 方法中创建 B 的实例。然后显式调用 B 的init(( 方法。您希望拥有:

class C(A,B):
def __init__(self):
print('C')
super().__init__(self)

根据Python文档,它说
_init__是一种特殊的Python方法,当
为新对象分配内存时会自动调用。
我们也可以显式调用__init__方法,这就是您在上面的代码中所做的。
B((是构造函数调用,并且已调用第一个__init__
并在您显式调用__init__((之后。 所以已经打了2次
电话。

确保初始化父基类的正确方法如下(您没有指定您的 Python 是 Python 2 还是 Python 3,所以我确保您的类继承自类object(:

class A(object):
def __init__(self):
print('A')
super(A, self).__init__()
#super().__init__() # alternate call if Python 3
class B(object):
def __init__(self):
print('B')
super(B, self).__init__()
#super().__init__() # alternate call  if Python 3
class C(A,B):
def __init__(self):
print('C')
super(C, self).__init__()
#super().__init__() # alternate call if Python 3
c1 = C()

或者,您可以简单地执行以下操作:

class A():
def __init__(self):
print('A')
class B():
def __init__(self):
print('B')
class C(A,B):
def __init__(self):
print('C')
A.__init__(self)
B.__init__(self)
c1 = C()

相关内容

  • 没有找到相关文章

最新更新