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

时间:2019-01-03 15:36:51

标签: python class object object-oriented-analysis

我希望一个类成为其自己的控制器并以这种方式初始化一些默认值:

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

问题:让类成为其自身控制器的正确Python方式是什么?

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

编辑:请参阅评论,以了解为什么我认为它不是链接问题的重复,我不想用有关它的解释来污染我的问题。

2 个答案:

答案 0 :(得分:1)

在类上有一个静态方法,该方法可初始化您要在实例化该类的任何实例之前必须调用的值。尝试执行此操作可以通过引发错误来实现:

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)

答案 1 :(得分:0)

您可以这样做:

class Foo:
    pass

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