我为家庭作业创建了这个课程:
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__
方法之后添加数据。或者,相反,您需要知道如何访问该数据,因为您已经正确添加了它。