Class 中的 NameError 在声明静态值时是它自己的控制器

NameError in Class being its own controller when declaring static values

我想要一个 class 作为它自己的控制器并启动一些默认值,这样:

class Foo:
    FOOS = [Foo(5), Foo(3), Foo(4)]

    def __init__(self, bar):
        self.bar = bar

但是我得到一个 NameError 异常:

`Traceback (most recent call last):
  File "/home/user/test.py", line 1, in <module>
    class Foo:
  File "/home/user/test.py", line 2, in Foo
    FOOS = [Foo(5), Foo(3), Foo(4)]
NameError: name 'Foo' is not defined

问题:让 class 成为它自己的控制器的正确 Pythonic 方式是什么?

旁注:我不敢相信我是第一个遇到这个问题的人。如果是重复的,我还没找到。

编辑:查看评论以了解为什么我认为它不是链接问题的重复项,我不想用相关解释污染我的问题。

你可以这样做:

class Foo:
    pass

Foo.FOOS = [ Foo(), Foo() ]

在 class 上有一个静态方法,它初始化您想要的值,必须在实例化 class 的任何实例之前调用这些值。这可以通过在尝试时引发错误来强制执行:

class Foo:
    FOOS = []
    init = False

    def __init__(self, bar):
        if not Foo.init:
            pass # raise some error
        self.bar = bar

    @staticmethod    
    def initialise():
        if not Foo.init:
            Foo.init = True
            Foo.FOOS = [Foo(5), Foo(3), Foo(4)]

Foo.initialise()
thing = Foo(2)