所以我使用静态类成员,这样我就可以在类方法和同一个类的静态方法之间共享数据(只有1个类的实例化)。我理解这很好,但我只是想知道静态成员什么时候被初始化?它是进口的吗?在第一次使用课程?因为我将从多个模块调用此类的静态成员(因此多于1个import语句)。访问静态方法的所有模块是否共享相同的静态数据成员?如果我的主客户端删除了我的类的实例,然后重新创建它(没有完全终止或重新导入东西),我的数据成员会被保留吗?
答案 0 :(得分:14)
它们将在类定义时初始化,如果要将类作为模块的一部分导入,则会在导入时进行初始化。这假设一个“静态”类成员定义样式如下:
class Foo:
bar = 1
print Foo.bar # prints '1'
请注意,这是一个静态类成员,不需要实例化该类。
import语句将执行模块的内容一次,无论执行多少次或在何处执行。
是的,静态成员将由访问它们的任何代码共享。
是的,如果删除类型为该类的对象,则将保留类的静态成员:
# 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'