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