Python中的实例变量不像我想象的那样

ryn*_*ynd 2 python arrays append instantiation instance

我在Python中遇到了一个我无法相信的问题.请参阅以下代码:

class Container(object):
    array = []

    def __init__(self):
        print self.array

for i in range(0, 5):
    container = Container()
    container.array.append('Test')
print 'Last Container:', container.array
Run Code Online (Sandbox Code Playgroud)

输出是:

[]
['Test']
['Test', 'Test']
['Test', 'Test', 'Test']
['Test', 'Test', 'Test', 'Test']
Last Container: ['Test', 'Test', 'Test', 'Test', 'Test']
Run Code Online (Sandbox Code Playgroud)

我认为Container该类在实例化时使用顶部的值进行初始化.为什么不是这样?

谢谢!

Dan*_*l G 6

其中的代码在class:创建类时执行,而不是在创建类的实例时执行.这是一个更清楚地显示这一点的例子:

>>> class Test(object):
...     print "Test"
...     def __init__(self):
...         print "init"
...
Test
>>> t = Test()
init
Run Code Online (Sandbox Code Playgroud)

请注意,在创建类时打印"Test",而不是在创建Test对象时打印.

正如其他答案所指出的那样,如果您希望属性对于类的特定实例(而不是类的所有实例)是本地的,那么代码必须放在__init__方法中:

def __init__(self):
    self.array = []
Run Code Online (Sandbox Code Playgroud)