Python RPG继承问题?

时间:2015-11-15 05:40:12

标签: python inheritance

我遇到了我的super()。 init 方法的TypeError,说明它只需要一个位置参数,并且给出了三个。我假设Enchanted类继承了父类Weapons和Item中的其他参数,但我似乎错过了什么?

如果需要,使用python 3.5并链接到GitHub存储库:PythonRPG

#base item class
class Item(object):
    def __init__(self, name, description):
        self.name = name
        self.description = description

    def __init__(self):
        return "{}\n=====\n{}\nDamage: {}".format(self.name, self.description) 

#start weapons
class Weapons(Item):
    def __init__(self, name, description, attack):
        self.attack = attack
        super().__init__(name, description)

    def __str__(self):
        return "{}\n=====\n{}\nDamage: {}".format(self.name, self.description, self.attack)

class Enchanted(Weapons):
    def __init__(self):
       #error appears here
        super().__init__(name="Enchanted Longsword", description="A prestine longsword you found with small runes inscribed along the Cross Guard. You feel a small magical force emanating from the weapon as you hold it.", attack = 12)

2 个答案:

答案 0 :(得分:1)

您的__init__课程中有两种Item方法。第二个覆盖第一个,因为它只需要一个位置参数(self),所以会抛出错误。简单修复:摆脱第二个__init__

我不确定,但也许你的意思是你的第二个__init____str__

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

    def __str__(self):
        return "{}\n=====\n{}\nDamage: {}".format(self.name, self.description)

答案 1 :(得分:0)

jme已经提供了一个很好的答案。我猜你正在尝试像方法重载或为Item类创建不同的构造函数。 在python类中,您不能有两个同名方法。但是,您可以通过为方法参数提供默认值来实现此属性。像这样:

class Item(object):
    def __init__(self, name=None, description=None):
        self.name = name
        self.description = description