我为家庭作业创建了这个课程:

class sayfa():
    isim=" "
    def __init__(self,bSayisi,ySayisi,pSayisi,iSayisi,tSayisi):
        self.bSayisi=bSayisi
        self.ySayisi=ySayisi
        self.pSayisi=pSayisi
        self.iSayisi=iSayisi
        self.tSayisi=tSayisi
        if ((((bSayisi+ySayisi+pSayisi)/iSayisi)/tSayisi)*100)>0.2:
             print(isim,"başarılı")
        else:
             print(isim,"başarısız")


然后我在另一个.py文件中调用了它:

from eRate import sayfa


ybs1=sayfa(365000,65000,870,500,1125000)
ybs1.isim="YBS-1"


然后我尝试工作,这给了我这个错误:

NameError: name 'isim' is not defined


我想我在上课时做错了事,但我不知道我做错了什么,你能帮我吗?

编辑:
当我将sim变量放入def init时,我的代码可以工作了,但是看起来很奇怪。

class sayfa():

    def __init__(self,bSayisi,ySayisi,pSayisi,iSayisi,tSayisi,isim):
        self.isim=str(isim)
        self.bSayisi=bSayisi
        self.ySayisi=ySayisi
        self.pSayisi=pSayisi
        self.iSayisi=iSayisi
        self.tSayisi=tSayisi
        if ((((bSayisi+ySayisi+pSayisi)/iSayisi)/tSayisi)*100)>0.2:
             print(isim,"başarılı")
        else:
             print(isim,"başarısız")


当我在课堂上添加数据时,它变得很奇怪:

from eRate import sayfa


ybs1=sayfa(365000,65000,870,500,1125000,"YBS-1")

最佳答案

错误不在于您分配事物的方式,而在于您访问它们的方式。

就像必须执行self.bSayisi设置属性一样,也必须执行self.isim才能访问一个属性。所以:

print(self.isim, "başarılı")


(与另一行相同...)



如果您想知道为什么不使用bSayisi就能够访问其他值,例如self.bSayisi,那是因为您碰巧有一个名为bSayisi的参数,而该参数恰好与self.bSayisi相同(因为您只是在几行之前就实现了这一点)。如果将其更改为self.bSayisi = bSayisi*2,或者将参数重命名为myBSayisi并执行了self.bSayisi = myBSayisi,则会看到仅使用bSayisi而不是self.bSayisi不再正确。



但是,尽管这消除了错误,但我不确定它是否确实可以满足您的要求。在执行此print时,尚未为该对象分配isim值,因此它将作为默认值获取类值,因此始终只是" "。那真的是您想要的吗?

如果没有,您需要在分配了print之后将isim调用移至以后可以调用的其他方法。例如:

class sayfa():
    isim=" "
    def __init__(self,bSayisi,ySayisi,pSayisi,iSayisi,tSayisi):
        self.bSayisi=bSayisi
        self.ySayisi=ySayisi
        self.pSayisi=pSayisi
        self.iSayisi=iSayisi
        self.tSayisi=tSayisi
    def displaystuff(self):
        if ((((self.bSayisi+self.ySayisi+self.pSayisi)/self.iSayisi)/self.tSayisi)*100)>0.2:
             print(self.isim,"başarılı")
        else:
             print(self.isim,"başarısız")

ybs1=sayfa(365000,65000,870,500,1125000)
ybs1.isim="YBS-1"
ybs1.displaystuff()




当然,将isim移到构造函数中可以避免遇到的问题。当然,这不是在__init__方法之后添加数据的答案,因为您是在__init__方法中添加数据。在适当的时候,这是最简单的答案。

但是,如果在这种情况下看起来很奇怪(我相信你的话;我不确切地知道此代码正在尝试做什么),则可能是该特定类的错误答案。

在这种情况下,您确实需要根据要求知道如何在__init__方法之后添加数据。或者,相反,您需要知道如何访问该数据,因为您已经正确添加了它。

09-07 09:54