python - 运行 def __init__(self) 函数后,如何在类对象中添加数据?

标签 python python-3.x class

我为我的作业创建了这个类(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/

相关文章:

python - 相当于 python 脚本的 sh 脚本

python - 如何在类中实现 asyncio websockets?

python - 如何在给定两个协程的 python 中实现,一直运行一个直到另一个完成

python - 为什么 `function` 不是 Python 中的关键字?

c++ - 类成员和函数c++

python - 在变量内部完成递归

带有字符串 x 轴标签的 Python matplotlib 趋势线

python - 删除在 python3 中使用 venv 创建的虚拟环境

java - 在哪里可以找到哪个库属于一个类?

python - Django 模板 : force choices on field and print display value with get_FOO_display()