初始化Python类中的静态字段

问题描述 投票:0回答:1

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

class Test:

    def _init_foo(): return 3

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

然而,口译员正在抱怨

NameError: name '_init_foo' is not defined

我该如何解决?

python class static
1个回答
1
投票

为什么这会失败是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}
© www.soinside.com 2019 - 2024. All rights reserved.