2016-07-08 9 views
0

ich jedoch mehrere ganze Zahlen von einer Klasse in Python hinzufügen Ich versuche es mit dem Fehler kommt:Der Versuch, Werte in Python hinzufügen, aber kommt mit int nicht aufrufbar Fehler

Traceback (most recent call last): File "G:/documents/Computing/Python/Fighter Game.py", line 53, in if player.health() + player.strength() + player.defence() + player.speed() == 350: TypeError: 'int' object is not callable

Der Code für die Klasse ist :

class Fighter: 
    name = "Not Set" 
    alignment = "Not Set" #good/bad 
    health = 0 
    strength = 0 
    defence = 0 
    speed = 0 
    def name(self): 
     return self.name 
    def alignment(self): 
     return self.alignment 
    def health(self): 
     return self.health 
    def strength(self): 
     return self.strength 
    def defence(self): 
     return self.defence 
    def speed(self): 
     return self.speed 
    def set_name(self, new_name): 
     self.name = new_name 
    def set_alignment(self, new_alignment): 
     self.alignment = new_alignment 
    def set_health(self, new_health): 
     self.health = new_health 
    def set_strength(self, new_strength): 
     self.strength = new_strength 
    def set_defence(self, new_defence): 
     self.defence = new_defence 
    def set_speed(self, new_speed): 
     self.speed = new_speed 

und der Code, der den Fehler wirft ist:

player = Fighter() 
while True: 
    player.set_name(input("Enter your name: ")) 
    player.set_alignment("good") 
    player.set_health(int(input("Enter your health: "))) 
    player.set_strength(int(input("Enter your strength: "))) 
    player.set_defence(int(input("Enter your defence: "))) 
    player.set_speed(int(input("Enter your speed: "))) 
    if player.health() + player.strength() + player.defence() + player.speed() == 350: 
     print("Player setup complete.") 
     break 
    else: 
     print("Numerical player values must all add up to 350.") 

Jede Hilfe, die geben könnte n wäre willkommen! :-)

+0

'.health' kann nicht eine Eigenschaft und eine Methode sein. Sie überschreiben die Methode mit einer Zahl, wenn Sie 'set_health' setzen. – deceze

+0

Sie verwenden Verteidigung sowohl als Attribut als auch als Funktion (def defense (self). Benennen Sie die Funktion oder das Attribut um und es sollte funktionieren. –

Antwort

4

Sie haben zwei Dinge, die self.health genannt werden; eine Ganzzahl und eine Methode. Das ergibt keinen Sinn.

Instanzvariablen oft mit _ Präfix und in __init__(), zumindest das ist die "Old-School" einfache Art und Weise tun einzurichten:

def __init__(self): 
    self._health = 40 

def health(self): 
    return self._health 

Und so weiter. Suchen Sie jedoch nach Attributen und Eigenschaften für elegantere Methoden.

+0

Und wirklich, da die Setter und Getter absolut nichts machen, können Sie genauso gut verwenden einfache Attribute ... – deceze