【发布时间】:2015-12-24 16:14:32
【问题描述】:
在多重继承中 super() 是如何工作的? 例如这里我有两个 init 我想通过 super() 发送参数:
class LivingThings(object):
def __init__(self, age ,name):
self.name=name
self.age=age
def Print(self):
print('age: ', self.age)
print('name: ', self.name)
class Shape(object):
def __init__(self, shape):
self.shape=shape
def Print(self):
print(self.shape)
class Dog(LivingThings, Shape):
def __init__(self, breed, age , name, shape):
self.breed=breed
super().__init__(age , name)
super().__init__(shape)
def Print(self):
LivingThings.Print(self)
Shape.Print(self)
print('breed', self.breed)
但错误:
super().__init__(shape)
TypeError: __init__() missing 1 required positional argument: 'name'
但此代码有效:
class Dog(LivingThings, Shape):
def __init__(self, breed, age , name, shape):
self.breed=breed
Shape.__init__(self, shape)
LivingThings.__init__(self,age ,name)
所以 super() 在多重继承中不起作用??
【问题讨论】:
-
如果你正确地实现它会这样——两个超类都没有使用
super,所以只有第一个被调用,它们有不同的签名。 -
除了向那些
__init__方法添加适当的super()调用外,您还需要更改它们,使它们都具有相同的调用签名。简单的方法是使用关键字 args 的字典,如 Daniel Roseman 链接的 Raymond Hettinger 文章中的ColoredShape示例所示。
标签: python inheritance