具有相同参数名称的多重继承

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]

不幸的是,WeaponVehicle都有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)