最近,我浏览了现有的代码库,其中包含许多类,其中实例属性反映了存储在数据库中的值。我已经重构了许多这些属性,以便推迟它们的数据库查找。不会在构造函数中初始化,而只能在初读时进行初始化。这些属性不会在实例的整个生命周期内发生变化,但是它们是第一次计算的真正瓶颈,只有在特殊情况下才真正访问。因此,它们也可以在从数据库中检索出来之后进行缓存(因此,它适合于记忆的定义,其中输入只是“无输入”)。
我发现自己一遍又一遍地为各种类的各种属性键入以下代码片段:
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包含许多现成的装饰器之前,就曾问过这个问题。我更新它只是为了更正术语。
婷婷同学_
凤凰求蛊
慕工程0101907
相关分类