相关疑难解决方法(0)

Python memoising/deferred lookup属性装饰器

最近,我浏览了一个包含许多类的现有代码库,其中实例属性反映了存储在数据库中的值.我重构了很多这些属性,以便延迟数据库查找,即.不是在构造函数中初始化,而是仅在第一次读取时初始化.这些属性在实例的生命周期内不会发生变化,但它们是第一次计算的真正瓶颈,并且只在特殊情况下才真正访问过.因此,它们也可以在从数据库中检索后进行缓存(这因此符合记忆的定义,其中输入只是"无输入").

我发现自己一遍又一遍地为各种类的各种属性输入以下代码片段:

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
Run Code Online (Sandbox Code Playgroud)

是否有现成的装饰器已经在Python中执行此操作,我根本不知道?或者,是否有一种相当简单的方法来定义装饰器来执行此操作?

我在Python 2.5下工作,但如果它们有显着差异,2.6答案可能仍然很有趣.

注意

在Python包含了大量现成的装饰器之前,人们已经提出了这个问题.我更新了它只是为了更正术语.

python decorator

106
推荐指数
4
解决办法
3万
查看次数

标签 统计

decorator ×1

python ×1