初始化Python类中的静态字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始化Python类中的静态字段相关的知识,希望对你有一定的参考价值。

我想在声明上初始化一个静态字段。

class Test:

    def _init_foo(): return 3

    foo = { _init_foo() for i in range(10)}

然而,口译员正在抱怨

NameError: name '_init_foo' is not defined

我该如何解决?

答案

为什么这会失败是explained here

你可以通过foo定义class decorator来解决这个问题。这是有效的,因为在调用add_foo的时候,已经定义了类,然后_init_foo可以作为cls._init_foo访问:

def add_foo(cls):
    cls.foo = { cls._init_foo() for i in range(10) }
    return cls

@add_foo
class Test:

    def _init_foo(): return 3


print(Test.foo)
# {3}

以上是关于初始化Python类中的静态字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中定义静态变量

如何初始化派生类中的静态成员?

BeforeFieldInit的小叙

随笔25 java中的类加载顺序

C#变量初始化问题:字段初始值无法引用非静态字段方法或属性

我可以使用 VS2010 PrivateObject 访问静态类中的静态字段吗?