2016-06-10 76 views
-1

我正在爲一個作業類編寫一段代碼,它應該允許我計算關於兩個列表的各種距離統計信息。然而,當我分配名單類,並嘗試打印的功能之一的結果,我得到的錯誤,Python類顯示名稱未定義

NameError: name 'ratings1' is not defined 

導致我相信我做了正確無論是在我的__init__功能或在函數中引用。你能幫助澄清我做錯了什麼嗎?

class similarity: 

    def __init__(self, ratingX, ratingY): 
     self.ratings1=ratingX 
     self.ratings2=ratingY 

    def minkowski(self,r): 
     self.r=r 
     mink=0 
     length=len(ratings1) 
     for i in range(0,length): 
      mink=mink+(abs(ratings1[i]-ratings2[i]))**r 
     mink=mink**(1/r) 
     result='Given r=%d, Minkowski distance=%f'%(r,mink) 
     return result    

    def pearson(self): 
     Xavg=average(ratings1) 
     Yavg=average(ratings2) 
     n=len(ratings1) 
     diffX=[] 
     diffY=[] 
     for i in range(0,n): 
      diffX.append(ratings1[i]-Xavg) 
      diffY.append(ratings2[i]-Yavg) 
     return diffX 
     diffXY=[] 
     for i in range(0,n): 
      diffXY.append(diffX[i]*diffY[i]) 

example2=similarity([1,3,5,5,6],[4,6,10,12,13]) 

print(example2.pearson()) 

注意:如果我在函數中將「rating1/2」的引用更改爲「ratingsX/Y」,則此錯誤仍然存​​在。

+1

可能重複[Python - 爲什麼這個類的變量沒有在方法中定義?](http://stackoverflow.com/questions/12790114/python-why-is-this-class-variable-not-defined-在方法)或[爲什麼實例變量不被識別](http://stackoverflow.com/questions/26728585/why-is-instance-variable-not-getting-recognized) –

回答

0

您需要在每次引用實例變量前使用self,即self.ratings1,並且您的縮進也是錯誤的。

+0

縮進是由於我複製/粘貼沒有檢查格式,但self.ratings1解決了我的問題,謝謝! –

0

我剛纔發現了我的錯誤。對於每個功能,我都沒有在ratings名稱前使用self.短語。要修改這個,我加了

ratings1=self. 
ratings2=self.ratings2 

到每個函數的開頭。問題解決了。