当调用类modu中的最后一个函数时,我得到了一个“float object not callable”错误

2024-05-16 02:36:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

return float(sum(self.aList2))

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


Tags: 函数inselflenreturndefstatsdiff
2条回答

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

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

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

似乎当您再次调用self.sqr\u diff()函数时,返回值无法读取。 可能GLP阻止了这个值,抱歉我不知道原因。但我修改了你的代码,它就行了

def variance(self):
    if self.aList2 == []:
        return (self.sqr_diff()/(self.n() - 1))
    else:
        return (sum(self.aList2) / self.n() - 1)

相关问题 更多 >