Python子类在构造函数中使用父变量
因此,我正在开发一个基于文本的RPG,我有一个类项,它如下所示:Python子类在构造函数中使用父变量,python,class,Python,Class,因此,我正在开发一个基于文本的RPG,我有一个类项,它如下所示: class Item: def __init__(self, name, value): self.name = name self.value = value class Weapon(Item): def __init(self, name, value, damage): self.damage = damage 接下来我有一个武器类,我想从item类继承它
class Item:
def __init__(self, name, value):
self.name = name
self.value = value
class Weapon(Item):
def __init(self, name, value, damage):
self.damage = damage
接下来我有一个武器类,我想从item类继承它,在武器构造函数中,我想让它接受“name”和“value”变量。在我的头脑中,它是这样工作的:
class Item:
def __init__(self, name, value):
self.name = name
self.value = value
class Weapon(Item):
def __init(self, name, value, damage):
self.damage = damage
我知道这是错误的,但我认为这基本上是可行的。我已经在“super()”函数上查找了很多线程,但是没有一个解释是这样做的。这是可能的还是我应该把武器分类分开?也。。。当它起作用的时候。。。构造函数调用是什么样子的?是的,调用父类的构造函数通常是您需要做的事情:
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
至于把武器分类分开,你应该通读这篇文章。人们对遗产是否“正确”以及在何种情况下继承有不同的看法。很抱歉,这太模糊了,但是您还没有给出关于用例的太多信息:-)您可以在
武器类中使用它,如下所示:
class Weapon(Item):
def __init__(self, name, value, damage):
super(Weapon, self).__init__(name, value)
self.damage = damage
并确保使用新样式的类,即继承自对象
:
class Item(object):
...
我用同样的解决方案思考,但我得到了一个类型错误:必须是type,而不是classobj
,在super…
行中。你知道为什么吗?啊!我现在明白了。。。所以基本上super()行从武器init获取参数,并将它们分配到项目init中各自的位置。。。对吗?super(…)
调用类似于Java-super()
调用,它“返回”父类的句柄,因此结果函数调用被委托给父类。本质上,您可以从项
手动调用初始化
函数,将在武器
初始化
调用中获得的两个参数传递给它。。。明白了吗?;)那很好!我意识到我不是很清楚。。。不是很清楚!不管怎样,我会看看这篇文章的!非常感谢。