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

我尝试使用多重继承。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'

有没有一种非人工的方法可以将它传递给所有超类?


温温酱
浏览 116回答 1
1回答

眼眸繁星

我猜你打算name在两个构造函数中表示本质上相同的东西。首先想到的是制作一个只使用一次的超类:class Named:    def __init__(self, name, *args, **kwargs):        passclass Weapon(Named):    def __init__(self, strength, *args, **kwargs):        super().__init__(*args, **kwargs)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python