我为我的作业创建了这个类(class):
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
我认为我在写课时做错了什么,但我不知道我实际上做错了什么。你能帮助我吗?
编辑: 当我将 isim 变量放入 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__
之后添加数据方法,如你所问。或者,更确切地说,您需要知道如何访问该数据 - 因为您已经正确添加了它。
关于python - 运行 def __init__(self) 函数后,如何在类对象中添加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50049369/