静态类成员python

Posted

技术标签:

【中文标题】静态类成员python【英文标题】:Static class members python 【发布时间】:2011-03-31 04:29:33 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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'

【讨论】:

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

以上是关于静态类成员python的主要内容,如果未能解决你的问题,请参考以下文章

Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)

python 为啥要使用静态方法

python静态方法类方法属性方法

类函数、成员函数、静态函数、抽象函数、方法伪装属性

python 面向对象专题:私有成员类方法静态方法属性isinstance/issubclass

python 面向对象专题:私有成员类方法静态方法属性isinstance/issubclass