Python 3不允许你在类的主体内引用该类本身(除非在方法中):
class A:
static_attribute = A()
def __init__(self):
...
在第二行代码中,因为‘A’未定义,所以引发了一个NameError
错误。
替代方案
我很快找到了一种解决方法:
class A:
@property
@classmethod
def static_property(cls):
return A()
def __init__(self):
...
尽管这并不完全相同,因为它每次返回一个不同的实例(您可以通过将该实例保存到静态变量中来防止此问题出现)。
是否有更简单和/或更优雅的替代方案?
编辑:我已将关于此限制原因的问题移至单独的问题。