2014-02-18 3 views
0

저는 'python'에 익숙하지 않고 클래스와 객체를 사용해 보았습니다.
클래스를 이해하기 위해 작은 코드를 사용해 보았습니다.
이 코드는 기본적으로 Herohealth (나는 100을주었습니다)으로 만듭니다. 데미지로 3 번의 공격이 있습니다. 코드는 입력을 묻습니다 "어떻게 공격하겠습니까?" 플레이어에서. att 사전에 주어진 공격에 대해 프로그램은 공격으로 인한 손상으로 원래의 건강을 뺀 플레이어의 새로운 health을 반환해야합니다.Python의 클래스와 상속

내 문제는 사용자의 입력을받은 후 플레이어의 새로운 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 메소드를 수정해야하며 (일반적으로 reserverd 키워드와 유사하지 않은 이름으로 수정해야합니다).

예 :

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 사전의 키인지 적어도 확인하십시오.

관련 문제