Python中的静态类成员

14

我正在使用静态类成员,以便可以在同一类的类方法和静态方法之间共享数据(该类只会有一个实例化)。我理解这一点很好,但我想知道静态成员何时初始化?是在导入时吗?还是在第一次使用类时?因为我将从多个模块调用该类的静态成员(因此会有多个导入语句)。所有访问静态方法的模块是否共享相同的静态数据成员?如果我的主要客户端删除了我的类的实例,然后重新创建它(而不是终止整个程序或重新导入东西),我的数据成员是否会被保留?

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'

1
是的,我意识到我不必实例化这个类。但是这个类实例需要访问这些成员以及其他模块。我的担忧是我从几个其他模块导入了这个模块。这是否意味着静态成员将为所有模块重置?还是每个导入它的模块都有自己的一组静态成员? - Falmarri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接