如果我们有类A
,定义如下,
class A:
def __init__(self, x):
self.x = x
大多数人为什么要使用
class B(A):
def __init__(self, x, y):
super().__init__(x)
self.y = y
而不是
class B(A):
def __init__(self, x, y):
A.__init__(self, x)
self.y = y
?我认为A.__init__(self, x)
比super().__init__(x)
好,因为它支持多重继承(我找不到使用super()
的方法):
class A:
def __init__(self, x):
self.x = x
class B:
def __init__(self, y):
self.y = y
class C(A, B):
def __init__(self, x, y, z):
A.__init__(self, x)
B.__init__(self, y)
self.z = z
当我尝试在前面的示例中使用super()
时,如下所示:
class A:
def __init__(self, x):
self.x = x
class B:
def __init__(self, y):
self.y = y
class C(A, B):
def __init__(self, x, y, z):
super().__init__(self, x)
super().__init__(self, y)
self.z = z
班级C
没有属性y
(请尝试:c = C(1, 2, 3)
和print(c.y)
在下一行。)
我做错了什么?
答案 0 :(得分:0)
我使用super().__init__()
,Python会以正确的顺序自动调用基类的所有构造函数(在第二个示例中首先是A
,然后是B
构造函数)。
这是Python之美,它可以很好地处理多重继承:)。