2014-02-18 188 views
0

我是'python'的新手,正在嘗試類和對象。
爲了理解我正在嘗試一些小代碼的課程。
此代碼基本上創建Herohealth(我給了100)。有三次傷害攻擊。該代碼詢問輸入「你將如何攻擊?」來自玩家。對於在att字典中給出的攻擊,程序必須返回原始健康減去受到攻擊傷害的玩家的新的healthpython中的類和繼承

我的問題是,我無法理解如何在從用戶處獲得輸入後返回播放器的新health。我得到的錯誤如下:

AttributeError: 'Input' object has no attribute 'health'. 

請有人可以幫助我的語法。

class Hero(object): 
    def __init__(self,name): 
     self.name=name 
    def stats(self,health): 
     self.health=health 
    def attack(self,kick,punch,kamehameha): 
     self.punch=punch 
     self.kick=kick 
     self.kamehameha=kamehameha 

att={"kick":20,"punch":10,"kamehameha":50} 

#taking input from the player 
class Input(Hero): 
    def __init__(self,a): 
     a=raw_input("how will you attack?:") 
     self.a=a 
    def new(self): 
     for a in att[key]: 
      return self.health - att[key] 

#create a player 
player1=Hero("goku") 
player1.stats(100) 

print player1.name 
print player1.health 

x=Input(att) 
print x.new() 

回答

0

new()是一個Hero類的方法,所以你應該在player1對象上調用它。除此之外,您應該修改您的new方法(並可能將名稱修改爲與通常保留的關鍵字不太接近的名稱)以接受攻擊類型。

例如:

print player1.new(x) 

和你new方法需要接受攻擊類型的字符串:

def new(self, attack_type): 
    return self.health -= att[attack_type] #I assume you want to modify the health value and not only return the subtracted value 

這種基本的變化應該只是讓你的代碼工作,但它遠非完美 - 你應該驗證用戶輸入或至少檢查攻擊類型是否是字典的關鍵字。