覆盖 __bool__ 以检查 class 是否存在?

Overriding __bool__ to check if class exists?

一种设计问题。我正在用一个实例变量启动一个 class,它只会在 运行 函数被调用时获取它的值?由于所有 运行 的数据都是相同的,所以我不想一遍又一遍地初始化它。我应该检查变量是 None 还是覆盖 bool 方法?或者有更好的方法来实现这个目标吗?

class Data:
    def __bool__(self):
        return True

class A:
    def __init__(self):
        self.data = None

    def run_bool(self):
        if not self.data:
            self.data = Data()

    def run_none(self):
        if self.data is None:
            self.data = Data()

只需检查它是否为 None。将 __bool__ 定义为始终 return True 不会做任何事情,因为通用 Python 对象无论如何都是真实的,但是显式 None 检查允许添加真正的 __bool__ 之后的行为(或切换到具有这种行为的类型),不会破坏任何东西。

从你的问题中不清楚,但也许你真正想要的是 functools.cache or functools.cached_property