Python子类在构造函数中使用父类变量

2 投票
2 回答
1647 浏览
提问于 2025-04-18 02:04

我正在做一个基于文本的角色扮演游戏,里面有一个叫做Item的类,结构大概是这样的:

class Item:
    def __init__(self, name, value):
        self.name = name
        self.value = value

接下来,我想创建一个武器类,让它继承自Item类。在武器类的构造函数中,我想让它接收“名字”和“价值”这两个变量。在我脑海中,它应该是这样工作的:

class Weapon(Item):
    def __init(self, name, value, damage):
        self.damage = damage

我知道这样写是不对的,但我就是觉得应该这样。为了弄明白这个“super()”函数,我查了很多相关的帖子,但没有一个解释能让我明白。所以我想知道,这种做法可行吗?还是说我应该把武器类单独写?另外……当它能正常工作时,构造函数的调用应该是什么样的呢?

2 个回答

0

是的,调用父类的构造函数通常是你需要做的事情:

class Weapon(Item):
    def __init__(self, name, value, damage):
        # Initialize the Item part
        Item.__init__(self, name, value)

        # Initialize the Weapon-specific part
        self.damage = damage

至于把武器类分开,你应该看看关于组合优于继承的文章。人们对继承是否“正确”以及在什么情况下使用有不同的看法。抱歉说得有点模糊,但你没有提供太多关于你使用场景的信息 :-)

3

你可以在你的 Weapon 类里面这样使用它:

class Weapon(Item):
    def __init__(self, name, value, damage):
        super(Weapon, self).__init__(name, value)
        self.damage = damage

并且要确保使用新式类,也就是说,要从 object 继承:

class Item(object):
    ...

撰写回答