Python类显示未定义的名称

时间:2016-06-10 17:35:39

标签: python class

我正在为家庭作业编写一段代码,这应该允许我计算关于两个列表的各种距离统计。但是,当我将列表分配给类,并尝试打印其中一个函数的结果时,我收到错误,

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())

注意:如果我在函数中将对“ratings/2”的引用更改为“ratingsX / Y”,则此错误仍然存​​在。

3 个答案:

答案 0 :(得分:0)

您需要在每次引用实例变量之前使用self,即self.ratings1,并且您的缩进也是错误的。

答案 1 :(得分:0)

评级与课程相关。使用top bottom等等..

答案 2 :(得分:0)

我只知道我的错误。对于每个函数,我都未能在self.名称之前使用ratings短语。为了修改这个,我添加了

ratings1=self.
ratings2=self.ratings2

到每个功能的开头。问题解决了。