我希望一个类成为其自己的控制器并以这种方式初始化一些默认值:
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方式是什么?
旁注:我不敢相信我是第一个遇到此问题的人。如果是重复项,我还没有找到。
编辑:请参阅评论,以了解为什么我认为它不是链接问题的重复,我不想用有关它的解释来污染我的问题。
答案 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() ]