Python - TypeError: 'int' object is not callable

11 浏览
0 Comments

Python - TypeError: 'int' object is not callable

使用Python 2.7版本

你好,

我有两个版本的PairOfDice类。

1.) 这个版本不工作,并抛出一个错误。

TypeError: 'int'对象不可调用

import random
class PairOfDice:
    """表示一对骰子,并具有返回总点数的方法。
    """
    def roll(self):
        self.total = random.randint(1, 6) + random.randint(1, 6)
    def total(self):
        return self.total
    def name(self, name):
        self.name = name
    def getName(self):
        return self.name
player1 = PairOfDice()
player1.roll()
print player1.total()

2) 这个版本是有效的。

import random
class PairOfDice:
    """表示一对骰子,并具有返回总点数的方法。
    """
    def roll(self):
        self.roll1 = random.randint(1, 6)
        self.roll2 = random.randint(1, 6)
    def total(self):
        return self.roll1 + self.roll2
    def name(self, name):
        self.name = name
    def getName(self):
        return self.name
player1 = PairOfDice()
player1.roll()
print player1.total()

请问有人能解释一下第一个版本有什么问题吗?

谢谢

0
0 Comments

这是因为你有一个名为total的属性和一个名为total的函数。当你运行roll函数时,你会覆盖类的total函数的定义。

换句话说,在运行roll函数之前,player1.total是一个函数。然而,一旦你运行roll函数,你将player1.total设置为一个数字。从此时起,当你引用player1.total时,你引用的是那个数字。

你可能希望将total函数重命名为getTotal或类似的名称。

0
0 Comments

在这个问题中,出现了一个类型错误:'int' object is not callable。这个错误的原因是在第一个类中,total既被定义为一个函数,又被定义为一个类的属性。这样的定义是不正确的。Python在最后一行代码中认为你所引用的total是一个整数变量,而不是一个函数。

要解决这个问题,一个好的做法是将函数名从total改为get_total。这样就不会与类的属性冲突,避免了类型错误的出现。

下面是修改后的代码示例:

class MyClass:
    def __init__(self, total):
        self.total = total
    def get_total(self):
        return self.total
my_object = MyClass(10)
print(my_object.get_total())  # 输出 10

通过将函数名改为get_total,我们避免了与类的属性冲突,成功解决了类型错误的问题。

0