useless super in multiple inheritance?
本问题已经有最佳答案,请猛点这里访问。
在多重继承中super()是如何工作的?例如,这里我有两个init,我想通过super()发送args:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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) |
但错误:
1 2 | super().__init__(shape) TypeError: __init__() missing 1 required positional argument: 'name' |
但是这个代码是有效的:
1 2 3 4 5 | 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,调用下一个方法。
请阅读RaymondHettinger的经典文章Super Considered Super。