具有相同参数名称的多重继承
Multiple inheritance with same parameter names
我尝试使用多重继承。 Tank
既是 Vehicle
又是 Weapon
:
class Weapon:
def __init__(self, name, strength, *args, **kwargs):
super().__init__(*args, **kwargs)
class Vehicle:
def __init__(self, name, average_speed, *args, **kwargs):
super().__init__(*args, **kwargs)
class Tank(Weapon, Vehicle):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Tank(name="Moshe", average_speed=68, weight=62.5, strength=17.7)
所以坦克的 MRO 是 [__main__.Tank, __main__.Weapon, __main__.Vehicle, object]
。
不幸的是,Weapon
和Vehicle
都有name
参数,所以目前出现以下错误:
TypeError: __init__() missing 1 required positional argument: 'name'
有没有一种非人工的方式让它通过所有超类?
我猜您打算 name
在两个构造函数中表示本质上相同的东西。首先想到的是做一个只消费一次的超类:
class Named:
def __init__(self, name, *args, **kwargs):
pass
class Weapon(Named):
def __init__(self, strength, *args, **kwargs):
super().__init__(*args, **kwargs)
我尝试使用多重继承。 Tank
既是 Vehicle
又是 Weapon
:
class Weapon:
def __init__(self, name, strength, *args, **kwargs):
super().__init__(*args, **kwargs)
class Vehicle:
def __init__(self, name, average_speed, *args, **kwargs):
super().__init__(*args, **kwargs)
class Tank(Weapon, Vehicle):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Tank(name="Moshe", average_speed=68, weight=62.5, strength=17.7)
所以坦克的 MRO 是 [__main__.Tank, __main__.Weapon, __main__.Vehicle, object]
。
不幸的是,Weapon
和Vehicle
都有name
参数,所以目前出现以下错误:
TypeError: __init__() missing 1 required positional argument: 'name'
有没有一种非人工的方式让它通过所有超类?
我猜您打算 name
在两个构造函数中表示本质上相同的东西。首先想到的是做一个只消费一次的超类:
class Named:
def __init__(self, name, *args, **kwargs):
pass
class Weapon(Named):
def __init__(self, strength, *args, **kwargs):
super().__init__(*args, **kwargs)