我想在声明上初始化一个静态字段。
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}