Python类显示名称未定义
问题描述:
我正在为一个作业类编写一段代码,它应该允许我计算关于两个列表的各种距离统计信息。然而,当我分配名单类,并尝试打印的功能之一的结果,我得到的错误,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”,则此错误仍然存在。
答
您需要在每次引用实例变量前使用self
,即self.ratings1
,并且您的缩进也是错误的。
+0
缩进是由于我复制/粘贴没有检查格式,但self.ratings1解决了我的问题,谢谢! –
答
评分与班级相关。使用self.ratings1
等。
答
我刚才发现了我的错误。对于每个功能,我都没有在ratings
名称前使用self.
短语。要修改这个,我加了
ratings1=self.
ratings2=self.ratings2
到每个函数的开头。问题解决了。
可能重复[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) –