2016-05-15 93 views
3

所以,我正在製作一個基於文本的遊戲來學習python語言。我無法獲得返回功能...我不能得到返回函數

這是我的代碼;

class Weapon: 
    def __str__(self): 
     return self.name 

class WoodenStaff(Weapon): 
    def __init__(self): 
     self.name = "Wooden Staff" 
     self.description = "Basic Staff" 
     self.damage = 5 

inventory = [WoodenStaff()] 
print (inventory) 

我跑這之後我:

[<__main__.WoodenStaff object at 0x000001E9F192CAC8>] 
+0

可能的複製[Python的\ _ \ _海峽\ _ \ _和列表(http://stackoverflow.com/questions/727761/python- str-and-lists) – syntonym

回答

3

您需要實現__repr__因爲你的對象是一個列表內。

class Weapon: 
    def __str__(self): 
     return self.name 

    def __repr__(self): 
     return self.name 

class WoodenStaff(Weapon): 
    def __init__(self): 
     self.name = "Wooden Staff" 
     self.description = "Basic Staff" 
     self.damage = 5 

inventory = [WoodenStaff()] 
print (inventory) 
>> [Wooden Staff] 

沒有實現__repr__,你會得到預期的輸出,如果遍歷列表:

class Weapon: 
    def __str__(self): 
     return self.name 

class WoodenStaff(Weapon): 
    def __init__(self): 
     self.name = "Wooden Staff" 
     self.description = "Basic Staff" 
     self.damage = 5 

inventory = [WoodenStaff()] 
for weapon in inventory: 
    print(weapon) 
>> Wooden Stuff 
2

您需要定義__repr__以及

def __repr__(self): 
     return self.name 

例如 -

>>> class Weapon: 
...  def __str__(self): 
...   return self.name 
...  def __repr__(self): 
...   return self.name 
... 
>>> class WoodenStaff(Weapon): 
...  def __init__(self): 
...   self.name = 'Foo' 
... 
>>> [WoodenStaff()] 
[Foo] 
0

只需添加的__repr__方法WoodenStaff

+0

你可以添加一些解釋,也許一些示例代碼嗎? – Rakete1111