python中的类和继承

时间:2014-02-18 17:48:31

标签: class python-2.7 inheritance

我是'python'的新手,正在尝试上课和对象 为了理解课程,我尝试了一些小代码。
这段代码基本上创建了Hero health(我给了100)。有三次攻击有伤害。代码从播放器询问输入“你将如何攻击?”。对于在att字典中给出的攻击,程序必须返回由于攻击造成的损害减去原始健康的玩家的新health

我的问题是我无法理解在从用户那里获取输入后如何返回播放器的新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()

1 个答案:

答案 0 :(得分: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

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