Python 我得到了一个“答案”;“浮动对象不可调用”;调用类模块中的最后一个函数时出错
这是我第一次尝试使用Python 3.6编写一个使用类和对象的函数程序。我试图做的是以数字列表的形式获取输入,并返回项目数、总和、平均值和方差。以下是我目前的代码:Python 我得到了一个“答案”;“浮动对象不可调用”;调用类模块中的最后一个函数时出错,python,class,oop,runtime-error,Python,Class,Oop,Runtime Error,这是我第一次尝试使用Python 3.6编写一个使用类和对象的函数程序。我试图做的是以数字列表的形式获取输入,并返回项目数、总和、平均值和方差。以下是我目前的代码: >>> class stats: aList2 = [] def __init__(self, aList): self.aList = aList def n(self): return len(self.aList) def total(self)
>>> 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
的变量和方法。在variance
方法中,sqr_diff()
被方法中定义的浮点变量覆盖
为了防止将来发生这种情况,您可以对类采用命名约定,例如:CamelCase
,mixedCase
方法和函数,并在分隔的变量名下面划线
更改其中一个方法或变量名称以解决此问题。这是因为您有一个名为
sqr\u diff
的变量和方法。在variance
方法中,sqr_diff()
被方法中定义的浮点变量覆盖
为了防止将来发生这种情况,您可以对类采用命名约定,例如: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)
似乎当您再次调用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)
我知道变量名和方法名应该是不同的。谢谢,成功了!不知道我到底是怎么错过的。@Jabernet没问题!如果这回答了您的问题,请不要忘记接受此答案,或者如果还有其他问题,请让我知道!:)我知道变量名和方法名应该是不同的。谢谢,成功了!不知道我到底是怎么错过的。@Jabernet没问题!如果这回答了您的问题,请不要忘记接受此答案,或者如果还有其他问题,请让我知道!:)