在多重繼承中super()的工作原理是什麼? 比如這裏我有兩個初始化,我想送的超)ARGS(:多重繼承中無用的超級?
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()劑量工作在多重繼承?
它會,如果你正確實施 - 沒有超類使用超級,所以只有第一個被調用,並且他們有不同的簽名。 – jonrsharpe
除了向這些'__init__'方法添加適當的'super()'調用外,還需要對它們進行更改以使它們都具有相同的調用簽名。簡單的方法是使用關鍵字參數的詞典,如Daniel Roseman所鏈接的Raymond Hettinger文章中的「ColoredShape」示例所示。 –