[英]I am getting a “float object not callable” error when calling last function in a class module
這是我第一次嘗試使用Python 3.6使用類和對象編寫功能程序。 我想做的是獲取輸入作為數字列表,然后返回項目數,總和,平均值和方差。 到目前為止,這是我的代碼:
>>> class stats:
aList2 = []
def __init__(self, aList):
self.aList = aList
def n(self):
return len(self.aList)
def total(self):
return sum(self.aList)
def average(self):
return sum(self.aList)/len(self.aList)
def sqr_diff(self):
for i in range(0, len(self.aList)):
self.sqr_diff = (self.average() -
self.aList[i])**2
stats.aList2.append(self.sqr_diff)
return sum(self.aList2)
def variance(self):
return (self.sqr_diff()/(self.n() - 1))
在進入方差函數之前,這非常有效:
>>> s = stats([5.0,7.0,10.0,12.0])
>>> s.n()
4
>>> s.total()
34.0
>>> s.average()
8.5
>>> s.sqr_diff()
29.0
>>> s.variance()
Traceback (most recent call last):
File "<pyshell#250>", line 1, in <module>
s.variance()
File "<pyshell#244>", line 17, in variance
return (self.sqr_diff()/(self.n() - 1))
TypeError: 'float' object is not callable
>>>
我所做的嘗試並修復它是使sqr_diff模塊通過以下方式返回浮點數
return float(sum(self.aList2))
那似乎根本沒有改變錯誤消息。 我茫然不知所措
這是因為您有一個變量和方法都名為sqr_diff
。 在variance
方法中, sqr_diff()
被方法中定義的float變量覆蓋。
為防止將來發生這種情況,您可以采用諸如以下的命名約定:類的CamelCase
, mixedCase
方法和函數以及下划線分隔的變量名。
更改這些方法或變量名稱之一來解決此問題。
似乎當再次調用函數self.sqr_diff()時,無法讀取返回值。 也許GLP阻止了該值,抱歉,我不知道原因。 但是我更改了您的代碼,並且它可以正常工作。
def variance(self):
if self.aList2 == []:
return (self.sqr_diff()/(self.n() - 1))
else:
return (sum(self.aList2) / self.n() - 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.