2014-02-18 135 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 

这种基本的变化应该只是让你的代码工作,但它远非完美 - 你应该验证用户输入或至少检查攻击类型是否是字典的关键字。