我正在尝试在我的一个方法中创建一个实例变量,并在另一个方法中调用它。我来自红宝石背景,你可以做@test ='这是测试'。我一直在阅读,我仍然有点困惑,我怎么能在python中完成同样的事情。是否需要 init 方法?我可以在create_test方法中创建一个实例变量并调用它吗?在我正在研究的项目中,我正在一个方法中进行大量计算,我想将其存储为变量以便稍后使用。以下是我所处的简化版本。
class ThisTest():
test = ''
def __init__(self):
self.test = self.test
def create_test(self):
self.test = 'this is test'
def puts_test(self):
print self.test
run = ThisTest()
run.puts_test()
这输出''我想在create_test中声明这个变量的地方。也许在python中我不想为此使用实例变量,我正在以错误的方式接近它。非常感谢帮助。感谢。
答案 0 :(得分:0)
自我'变量是指实例。在您的示例中,test
是一个类变量,而您想要的可能是在计算方法中设置self.whatever
。
In [38]: class Test(object):
....: def modify_state(self):
....: self.ponk = "ponk"
....: self.blonk = "splonk"
....:
In [39]: a = Test()
In [40]: a.ponk
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-40-00b6c3f2ca26> in <module>()
----> 1 a.ponk
AttributeError: 'Test' object has no attribute 'ponk'
In [41]: a.modify_state()
In [42]: a.ponk
Out[42]: 'ponk'
首次创建实例时会调用 __init__
,并为您提供在实例上设置初始状态的机会。
继承的类变量和正确的实例变量之间的区别可能在这里可见:
In [43]: Test.ponk = "blork"
In [44]: a = Test()
In [45]: a.ponk is Test.ponk
Out[45]: True
In [46]: a.modify_state()
In [47]: a.ponk is Test.ponk
Out[47]: False
事后看来,&#39; ponk&#39;和&#39; blonk&#39;和&#39; splork&#39;这个例子可能是非常糟糕的名字。抱歉。