您可以使用元类:class SelfReferencingObjectMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['obj'] = property(lambda self: self.__class__.obj)
return super(SelfReferencingObjectMetaclass, cls).__new__(cls, name, bases, attrs)
@property
def obj(cls):
try:
return cls._obj
except AttributeError:
cls._obj = cls()
return cls._obj
class A(object):
__metaclass__ = SelfReferencingObjectMetaclass
正如@Daniel Roseman在对@jamylak的回答的评论中所指出的那样,也许有一种更简单、更像Python的方法来解决你的问题。在该注释之后,如果在对象结构方面不完全相同,那么如何在功能上实现这一点,将通过以下模块实现:
a.pyclass A(object):
@property
def obj(self):
return a_inst
a_inst = A()
这确实在使用它的代码中创建了有点难看的构造from a import A,但是实现它的方式不那么复杂。你知道吗