2016-11-25 11 views
1

私はPythonでテキストベースの冒険を作成しています。私はPythonに関する2冊の本を用意してオンラインコースを受講しているので、私は本当にすべての基本を失ったと思う。バインドされていないメソッドエラー - テキストベースの冒険

現在、現在アイテムを作成しています。私の設定は

アイテム - >武器 - ここ(特定の武器)です。

すべてのクラスは前のとおり継承します。

Holy_SwordやStickなどの項目の値を印刷できません。私はそれらをクラスとして作成せず、変数を使って武器のインスタンスを作成すれば、それらを印刷することができます。しかし、私がラインでさらにやりたいことのために、私は本当にクラスであることを望んでいます。

私は取得していますエラーは次のとおりです。最初の引数は(代わりに何も持っていない)としてHoly_Swordインスタンスで呼び出さなければなりません

未結合の方法STR()

私のコードは次のとおりです。

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__() 

答えて

1

クラスを最初にインスタンス化する必要があります。

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

ここにあるコードでは、Holy_Swordはクラスを指しています。それ自体はItemのインスタンスではありません。

Holy_Sword.__str__はインスタンスメソッドです。あなたがここでやろうとしているように、それ自身で呼び出すことはできません。 Holy_Swordクラスのインスタンスを通じて呼び出される必要があります。

は(str(Holy_Sword)例えば、この方法は通常のみstr()関数を使用して呼び出す必要があります。それは直接__str__を起動しないように、通常より良いということに注意してください。)

あなたは何ができるかHoly_Swordのインスタンスを作成し、文字列を印刷していますその値は:

sword = Holy_Sword() 
print str(sword) 

しかし、あなたの代わりにHoly_Swordではなく、サブクラスであるより、特定の属性を持つWeaponのインスタンスであることを検討することをお勧めします。それが他の武器と異なる必要がある唯一の方法が属性にあるならば、別のクラスである必要はありません。

関連する問題