子类,意外参数和未解决的引用的问题

时间:2017-10-27 14:02:59

标签: python python-3.x class subclass superclass

所以我尝试制作无尽的文字冒险游戏(使用this网站的帮助),但我的课程出现问题:

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

def __str__(self):

    return "{}\n=====\n{}\nValue: {}\n".format(self.name, self.desc, self.usable, self.value)


class Weapon(Item):

    def __init__(self, damage):
        self.damage = damage
        super().__init__(desc, name, usable, value)

    def __str__(self):
        return "{}\n=====\n{}\nValue: {}\nDamage: {}".format(self.name, self.damage, self.desc, self.usable, self.value)


class BrokenSword(Weapon):

    def __init__(self):
        super(Weapon, self).__init__(name="Broken Sword",
                                     desc="A sword that didn't resist time.",
                                     value=1,
                                     usable=0,
                                     damage=1)

PyCharm声明desc, name, usable类(value内部)中的Weaponsuper().__init__()是未解决的引用,并且它们是BrokenSword(Weapon)中的意外参数类。代码与教程非常相似,所以它有什么问题?教程是用python 2.x编写的吗?我该如何修复我的代码?

1 个答案:

答案 0 :(得分:1)

Weapon类并不知道这些参数是什么。您必须在本地或-god全局禁止它们。所以Weapon.__init__应该接受参数:

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