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

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

【问题讨论】:

    标签: python static static-variables


    【解决方案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'
    

    【讨论】:

    • 是的,我意识到我不必实例化该类。但是类实例需要访问这些成员以及其他模块。我担心我正在从其他几个模块导入这个模块。这是否意味着所有模块的静态成员都被重置?还是每个导入它的模块都有自己的一组静态成员?
    猜你喜欢
    • 2018-10-05
    • 2012-04-13
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多