2010-08-17 158 views
12

所以我使用静态类成员,这样我就可以在类方法和同一类的静态方法之间共享数据(只有一个类的实例化)。我理解这很好,但我只是想知道什么时候静态成员被初始化?它是否导入?关于班级的第一次使用?因为我将从多于一个模块(因此多于一个导入语句)调用此类的静态成员。访问静态方法的所有模块是否共享相同的静态数据成员?如果我的主客户端删除了我的类的实例,然后重新创建它(没有完全终止或重新导入东西),我的数据成员是否会被保留?静态类成员python

回答

13

它们将在类定义时进行初始化,如果您将该类作为模块的一部分导入,将在导入时发生。假设这样的“静态”类成员定义样式:

class Foo: 
    bar = 1 

print Foo.bar # prints '1' 

请注意,这是一个静态类成员,因此不需要实例化类。

导入语句只会执行一次模块的内容,无论执行多少次或执行的位置。

是的,静态成员将由访问它们的任何代码共享。

是的,如果你删除的对象,其类型一类的静态成员将被保留,是类:

# Create static member 
class Foo: 
    bar = 1 

# Create and destroy object of type Foo 
foo = Foo() 
del foo 

# Check that static members survive 
print Foo.bar # Still prints '1' 
+1

是的,我知道我没有实例化的类。但类实例需要访问这些成员以及其他模块。我担心我从其他几个模块导入此模块。这是否意味着静态成员重置所有模块?或者每个导入它的模块都有自己的一组静态成员? – Falmarri 2010-08-17 19:38:54

+0

你的编辑回答了我的问题,谢谢=] – Falmarri 2010-08-17 19:39:24