【问题标题】:Trying to add values in python but comes up with int not callable error尝试在 python 中添加值但出现 int not callable 错误
【发布时间】:2016-07-08 12:28:25
【问题描述】:

我正在尝试从 python 中的一个类中添加多个整数,但是它出现了错误:

Traceback(最近一次调用最后一次): 文件“G:/documents/Computing/Python/Fighter Game.py”,第 53 行,在 如果 player.health() + player.strength() + player.defence() + player.speed() == 350: TypeError: 'int' 对象不可调用

类的代码是:

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

如果能提供任何帮助,我们将不胜感激! :-)

【问题讨论】:

  • .health 不能既是属性又是方法。当您 set_health 时,您正在用数字覆盖该方法。
  • 您将防御用作属性和函数(def defence(self)。重命名函数或属性,它应该可以工作。

标签: python class python-3.x int


【解决方案1】:

你有两个东西叫做self.health;一个整数和一个方法。这没有意义。

实例变量通常以_为前缀,并设置在__init__(),至少这是“老派”简单的做法:

def __init__(self):
  self._health = 40

def health(self):
   return self._health

等等。但是,请查看属性和属性,以获得更优雅的方法。

【讨论】:

  • 真的,既然 setter 和 getter 什么都不做,你也可以使用普通属性...
猜你喜欢
  • 2020-07-16
  • 1970-01-01
  • 2023-01-26
  • 2020-03-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
相关资源
最近更新 更多