试图理解python中的实例变量

时间:2015-04-10 18:17:20

标签: python-2.7 variables instance-variables

我正在尝试在我的一个方法中创建一个实例变量,并在另一个方法中调用它。我来自红宝石背景,你可以做@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中我不想为此使用实例变量,我正在以错误的方式接近它。非常感谢帮助。感谢。

1 个答案:

答案 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;这个例子可能是非常糟糕的名字。抱歉。