我正在使用静态类成员,以便可以在同一类的类方法和静态方法之间共享数据(该类只会有一个实例化)。我理解这一点很好,但我想知道静态成员何时初始化?是在导入时吗?还是在第一次使用类时?因为我将从多个模块调用该类的静态成员(因此会有多个导入语句)。所有访问静态方法的模块是否共享相同的静态数据成员?如果我的主要客户端删除了我的类的实例,然后重新创建它(而不是终止整个程序或重新导入东西),我的数据成员是否会被保留?
我正在使用静态类成员,以便可以在同一类的类方法和静态方法之间共享数据(该类只会有一个实例化)。我理解这一点很好,但我想知道静态成员何时初始化?是在导入时吗?还是在第一次使用类时?因为我将从多个模块调用该类的静态成员(因此会有多个导入语句)。所有访问静态方法的模块是否共享相同的静态数据成员?如果我的主要客户端删除了我的类的实例,然后重新创建它(而不是终止整个程序或重新导入东西),我的数据成员是否会被保留?
如果你将类作为模块的一部分导入,则它们将在类定义时初始化,这将在导入时发生。这是假设使用类似以下"静态"类成员定义风格:
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'