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)
我想要一个 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)