我正在用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()