【发布时间】:2015-01-09 11:04:44
【问题描述】:
如果我们有类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) 在下一行)。
我做错了什么?
【问题讨论】:
-
super正好用于多重继承,因此您不必在所有单独的超类上显式调用该方法。
标签: python class multiple-inheritance superclass