Python中的静态类成员
我在使用静态类成员,这样可以在同一个类的不同方法之间共享数据(这个类只会被实例化一次)。我对这个理解得很好,但我想知道这些静态成员到底是什么时候被初始化的?是在导入的时候吗?还是在第一次使用这个类的时候?因为我会在多个模块中调用这个类的静态成员(所以会有多个导入语句)。那么,所有访问这些静态方法的模块会共享同样的静态数据成员吗?如果我的主程序删除了这个类的实例,然后又重新创建它(没有完全终止程序或者重新导入东西),我的数据成员会被保留吗?
1 个回答
16
这些静态成员会在类定义的时候被初始化,如果你是作为模块的一部分来导入这个类,那么初始化会在导入的时候发生。这里假设你使用的是像这样的“静态”类成员定义方式:
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'