2016-05-07 76 views
2

Python3:TypeError: 'int' object is not callable,是因爲我調用方法.area()的方式是錯誤的嗎?或者是因爲我確定.area()的方式是錯誤的?謝謝Python3:TypeError:'int'對象不可調用

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) 
+0

哪條線?你能顯示錯誤信息嗎? – uhoh

+0

爲什麼你定義兩次'__str__'? – miradulo

+0

更好地調用方法setArea,或者如果輸入爲空/無有「獲取」行爲,並且如果有值具有「設置」行爲。 – uhoh

回答

6

這是因爲你先定義一個變量area(整數具體而言)作爲一個屬性的類Rectangle,以及後來的函數area()

這種不一致性會導致混淆,因此Python解釋器會嘗試調用整數作爲失敗的函數。只需重命名一個整數變量(self.area = ...)或函數(def area(...)),並且一切都應該正常工作。

希望這會有所幫助!

2

您在area方法和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
def area(self, height, width): 
    self.area = self.height * self.width 

你定義一個方法area和方法內你有int覆蓋它。