最近,我查看了包含许多类的现有代码库,其中实例属性反映存储在数据库中的值。我已经重构了许多这些属性,以延迟它们的数据库查找,即。不能在构造函数中初始化,而只能在首次读取时初始化。这些属性不会在实例的生命周期中改变,但是它们是第一次计算的真正瓶颈,并且只有在特殊情况下才能真正访问。因此,在从数据库中检索到它们之后,也可以对它们进行缓存(因此,这符合 备忘录的定义,其中输入只是“无输入”)。
我发现自己一遍又一遍地为不同类的各种属性输入以下代码片段:
class testA(object):
def __init__(self):
self._a = None
self._b = None
@property
def a(self):
if self._a is None:
# Calculate the attribute now
self._a = 7
return self._a
@property
def b(self):
#etc
在 Python 中是否已经有一个现有的装饰器来完成这项工作,而我对此一无所知?或者,是否有一种相当简单的方法来定义这样做的装饰器?
我使用的是 Python 2.5,但是如果2.6的答案有很大的不同,那么它们仍然很有趣。
在 Python 为此包含许多现成的装饰器之前,就已经提出了这个问题。我更新它只是为了纠正术语。