我在调用类模块中的最后一个函数时收到"float object not callable"错误



这是我第一次尝试使用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模块返回一个float

return float(sum(self.aList2))

这似乎根本没有改变错误信息。我不知道它可能是什么

这是因为您有一个名为sqr_diff的变量和方法。在variance方法中,sqr_diff()被该方法中定义的浮点变量覆盖。

为了防止将来发生这种情况,您可以采用命名约定,例如:类的CamelCasemixedCase方法和函数以及下划线分隔的变量名。

请更改其中一个方法或变量名以解决此问题

当您再次调用函数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)

相关内容

最新更新