2013-07-03 29 views
1
class Character: 
    def __init__(self): 
     self.name = "" 
     self.health = 1 
     self.health_max = 1 

class Player(Character): 
    def __init__(self): 
     Character.__init__(self) 
     self.state = 'normal' 
     self.health = 10 
     self.health_max = 10 

class Monster(Character): 
    def Dragon(self): 
     self.name = "Dragon" 
     self.health = 20 

    def Goblin(self): 
     name = "Goblin" 
     health = 5 

p = Player() 
p.name = raw_input("Please enter your name: ") 
print p.name 
print p.state 
print p.health 
print p.health_max 

m = Monster() 
enemy = m.Dragon 
print enemy.name 
print enemy.health 

對不起,我已經簡單地解釋了我遇到的困難。我在OOP的基礎知識方面遇到了一些麻煩,而且我遇到了這個代碼片段的問題。我試圖在這裏創建一個「龍」,但我遇到了以下錯誤:錯誤:未綁定的方法Dragon()必須使用Enemy實例作爲第一個參數進行調用(取而代之的是Player實例)

Traceback (most recent call last): File "test2.py", line 32, in print enemy.name AttributeError: 'function' object has no attribute 'name'

你能告訴我我在做什麼錯嗎?謝謝。

+0

我沒有看到任何地方'定義enemy'。在問題中是否存在一些錯字,或者'myenemy'是'敵人'? – TerryA

+0

好,我把它改成敵人,但仍然得到同樣的錯誤。 –

回答

2

你必須首先創建一個類的實例,你從它調用任何函數之前:

myenemy = Enemy() 
myenemy.Dragon() 

在代碼中,它看起來像你創建self.enemy,但後來你打電話self.enemy = Enemy.Dragon(self)。而不是最後一行,放self.enemy = self.enemy.Dragon(self)

在代碼的其他部分,它似乎也是一個反覆出現的問題。 Commands = {'explore': Player.explore}應該可能是Commands = {'explore': p.explore}(創建實例p後)。


由於您的更新代碼,我認爲你得到的功能和類混在一起。 Dragon是一個功能,當你做enemy = m.Dragon時,你只需將該功能複製到敵人身上。因此,當你做enemy.name時,認爲它是一個類,會引發錯誤,因爲enemy現在是一個函數,而不是一個實例。

你必須爲不同的怪物創建單獨的類:

class Dragon: 
    self.name = "Dragon" 
    self.health = 20 

class Goblin: 
    name = "Goblin" 
    health = 5 
+0

嗨,謝謝你的回答。我已經改變了我的問題的格式,以更好地解釋我遇到的問題。如果你有機會看看編輯過的問題,將不勝感激。謝謝。 –

+0

@ ron_di28我編輯了我的答案(檢查底部位) – TerryA

+0

明白了。謝謝!需要刷新我對函數和類的理解。 –

相關問題