试图理解 python 中的实例变量

Trying to understand instance variables in python

我试图在我的一个方法中创建一个实例变量并在另一个方法中调用它。我来自 ruby 背景,您可以在那里做 @test = 'this is 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 中我不想为此使用实例变量,我正在以错误的方式接近它。非常感谢您的帮助。谢谢

'self' 变量引用实例。在你的例子中, test 是一个 class 变量,而你想要的可能是在你的计算方法中设置 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__ 在首次创建实例时调用,让您有机会在实例上设置初始状态。

继承的 class 变量和适当的实例变量之间的区别可能在此处可见:

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

事后看来,'ponk' 和 'blonk' 以及 'splork' 可能是这个例子中非常糟糕的名字。对不起。