覆盖 __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
。
一种设计问题。我正在用一个实例变量启动一个 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
。