未绑定的方法错误 - 基于文本的冒险

时间:2016-11-25 23:51:41

标签: python class methods

我在python中创建基于文本的冒险。我已准备好两本关于python的书并参加了一个在线课程,所以我认为我真的已经掌握了所有的基础知识。

现在我正在创建我的项目。我的设置是

  

项目 - >武器 - >(此处为特定武器)。

所有类都继承前一个。

我无法打印Holy_Sword和Stick等项目的值。如果我不将它们创建为类,只使用变量来创建武器实例,我就可以打印它们。但是,由于我想要进一步发展,我真的希望他们成为课程。

我得到的错误是:

  

未绑定的方法 str ()必须使用Holy_Sword实例作为第一个参数调用(没有取而代之)

我的代码是:

class Item(object):
    def __init__(self, name, value, description):
        self.name = name
        self.value = value
        self.description = description
    def item_description(self):
        return "Your %s is worth %d gold and is a %s" % (self.name, self.value, self.description)

class Weapon(Item):
    def __init__(self,name, value,description,  attack):
        self.attack = attack
        super(Weapon, self).__init__(name, value, description)
    def __str__(self):
        return "Your %s is worth %d gold and has an Attack Damage of %d, it is %s" % (self.name, self.value, self.attack, self.description)

class Stick(Weapon):
    def __init__(self, name, value, description, attack):
        super(Stick, self).__init__(name = "Stick", value= 1, description = "A stick...there may be potential here....or not.", attack = 1)

class Holy_Sword(Weapon):
    def __init__(self, name, value, description, attack):
        super(Holy_Sword, self).__init__(name = "The Holy Sword of Antioch", value= 20, description = "A Sword whose potential far outweighs it's lack of stylishness ", attack = 20)

class Sword(Weapon):
    def __init__(self, name, value, description, attack):
        super(Sword, self).__init__(name = "Sword", value= 3, description = "A Wooden Sword.", attack = 5)


print Holy_Sword.__str__()

2 个答案:

答案 0 :(得分:1)

您需要首先实例化该类:

my_sword = Holy_sword(...) 
print my_sword.__str__() 

答案 1 :(得分:1)

请注意,在此处的代码中,Holy_Sword指的是一个类。它本身不是Item的实例。

Holy_Sword.__str__是一种实例方法。它不能像你在这里做的那样被自己调用;它必须通过Holy_Sword类的实例调用。

(请注意,通常最好不要直接调用__str__。此方法通常只能通过str()函数调用,例如str(Holy_Sword)。)

您可以做的是创建Holy_Sword的实例并打印该字符串的值:

sword = Holy_Sword()
print str(sword)

但是,您可能希望考虑将Holy_Sword作为具有特定属性的Weapon实例,而不是作为子类。如果它需要与其他武器区别开来的唯一方式就是它的属性,那么它就不需要成为一个单独的类。