Python memoising/deferred lookup property decorator Python memoizing/延迟查找属性装饰器

21 浏览
0 Comments

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包含许多现成的装饰器之前提出的。我只是更新了术语以修正它。

0