Python子类在构造函数中使用父类变量
我正在做一个基于文本的角色扮演游戏,里面有一个叫做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):
...