簡體   English   中英

在類模塊中調用最后一個函數時,出現“無法調用的浮動對象”錯誤

[英]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變量覆蓋。

為防止將來發生這種情況,您可以采用諸如以下的命名約定:類的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM