2016-07-08 1 views
0

int型でない呼び出し可能なエラーを思い付く:はpythonで値を追加しようとしているが、しかし、それはエラーを思い付く私はPythonでクラスから複数の整数を追加しようとしています

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

は、クラスのコードがある

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 

とエラーをスローするコードは次のとおりです。

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.") 

ギブかもしれないすべてのヘルプnをいただければ幸いです! :-)

+0

'.health'はプロパティとメソッドの両方になることはできません。 'set_health'のときにメソッドを上書きします。 – deceze

+0

あなたは属性と関数の両方として防御を使用しています(def defense(self))。関数または属性の名前を変更すれば正常に機能します –

答えて

4

self.healthと呼ばれるものが2つあります。整数および方法。これは意味をなさない。その上

def __init__(self): 
    self._health = 40 

def health(self): 
    return self._health 

そして:

インスタンス変数は、多くの場合、少なくとも、これはそれを行うための「古い学校」の簡単な方法で、_を前に付け、そして__init__()に設定されています。しかし、これを行うもっとエレガントな方法のために属性とプロパティを調べてください。

+0

実際、setterとgetterは絶対に何もしていないので、プレーン属性... – deceze

関連する問題