【发布时间】:2016-04-06 01:10:01
【问题描述】:
Python 3 不允许您在其主体内引用类(方法除外):
class A:
static_attribute = A()
def __init__(self):
...
这会在第二行引发NameError,因为'A' is not defined。
替代品
我很快找到了一种解决方法:
class A:
@property
@classmethod
def static_property(cls):
return A()
def __init__(self):
...
虽然这并不完全相同,因为它每次都返回不同的实例(您可以通过第一次将实例保存到静态变量来防止这种情况发生)。
是否有更简单和/或更优雅的替代方案?
编辑: 我已将有关此限制原因的问题移至separate question
【问题讨论】:
-
如果您提供了一个案例,让类的实例成为同一类的属性很有用,这将是一个更有趣的问题。例如,与 Java 不同的是,您可以拥有存在于类定义之外的对象。
标签: python class python-3.x static-methods language-design