Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python子类在构造函数中使用父变量_Python_Class - Fatal编程技术网

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

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类继承它

因此,我正在开发一个基于文本的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类继承它,在武器构造函数中,我想让它接受“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()
调用,它“返回”父类的句柄,因此结果函数调用被委托给父类。本质上,您可以从
手动调用
初始化
函数,将在
武器
初始化
调用中获得的两个参数传递给它。。。明白了吗?;)那很好!我意识到我不是很清楚。。。不是很清楚!不管怎样,我会看看这篇文章的!非常感谢。