Shengjing Shengjing - 7 months ago 30
Python Question

Python3: TypeError: 'int' object is not callable

Python3:

TypeError: 'int' object is not callable
, is it because the way I called the method
.area()
is wrong? Or is it because the way I def the
.area()
is wrong? Thank you

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)


Here I call
.area()
, I think what's where the problem comes from:

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

Answer

You have name collision between the area method and the area field. It looks like you dont need the area field at all. And the arguments of the area function are not used. And you have two __str__ functions too. I attempted to fix it:

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())