Python3:TypeError:' int'对象不可调用

时间:2016-05-07 16:00:34

标签: python oop python-3.x

Python3:TypeError: 'int' object is not callable,是因为我调用方法.area()的方式错了吗?或者是因为我确定.area()的方式是错误的?谢谢

class Rectangle: 
    def __init__ (self):
        self.height = 0
        self.width = 0
        self.area = 0

    def setData(self, height, width):
        self.height = height
        self.width = width

    def area(self, height, width):
        self.area = height * width

    def __str__(self):
        return "height = %i, width = %i" % (self.height, self.width)
        return "area = %i" % self.area

if __name__ == "__main__":
    r1 = Rectangle()
    print (r1)
    r1.setData(3,4)
    print (r1)

我在此致电.area(),我想问题来自哪里:

    r1.area(3,4)
    print (r1)

3 个答案:

答案 0 :(得分:6)

这是因为您首先将变量area(一个特定的整数)定义为类Rectangle的属性,后来定义为函数area()

这种不一致会导致混淆,因此Python解释器会尝试将整数调用为失败的函数。只需重命名整数变量(self.area = ...)或函数(def area(...))之一,一切都应该正常。

希望这有帮助!

答案 1 :(得分:2)

area方法与__str__字段之间存在名称冲突。看起来你根本不需要区域。并且不使用区域函数的参数。而且你也有两个class Rectangle: def __init__ (self): self.height = 0 self.width = 0 def setData(self, height, width): self.height = height self.width = width def __str__(self): return "height = %i, width = %i" % (self.height, self.width) def area(self): return self.height * self.width if __name__ == "__main__": r1 = Rectangle() print (r1) r1.setData(3,4) print (r1) print ("area = ", r1.area()) 函数。我试图解决它:

{{1}}

答案 2 :(得分:1)

def area(self, height, width):
    self.area = self.height * self.width

您正在定义方法area,并在方法中使用int覆盖它。