惰性初始化的代理对象

Proxy object for lazy initialization

是否有现成的 Python 模块提供易于使用的代理对象,仅在真正需要时才初始化 "real" 对象?

理想情况下,我正在寻找一个透明的实现,这样处理这个代理对象的代码就不需要知道它不是实际对象。

我想这样使用它:

class Example:
    def __init__(self):
        print("Example initialized")

lazy = Proxy(Example)
print(isinstance(lazy, Example))
# Example initialized
# True

如您所见,它的行为非常类似于 unittest.MagicMock。

如果没有任何库提供这样的功能,我会自己实现它,但我想确保没有其他人这样做过。

编辑

我希望这个代理对象遵循一个完整的实现 like this

我发现模块 lazy-object-proxy 正是这样做的。

值得一提的是,正如@Marat 指出的那样Django offers a solution as well,虽然我不想为此导入 Django,但如果您已经在您的项目中使用它,那将是一个完美的解决方案。