轻松缓存

晚上
并感谢您的宝贵阅读能力。
今晚编码时出现了以下模式。
它有效,但我可疑,这似乎太容易了。
那么,任何评论或建设性的批评都欢迎吗?
***开始医生格式***
... def __init __(自我):
... self.value_in_database = 0
...
... def youme_slow_database_access(self):
...返回self.value_in_database
...
... @财产
... def show(self):
...结果= self.very_slow_database_access()
... self.show =结果
...返回结果
...
创建一个实例
有人写入数据库
呼叫显示作为方法,获取值
9
显示现在是一个缓存的字符串
9
显示不是一种方法
如果其他人写入数据库
我们不会看到变化
9
迫使数据库中的另一个读取
删除字符串属性
下次我们尝试使用属性
Python将再次找到该方法
7
***
- -
艾伦

# 回答1


jalanb3写道:
... def __init __(自我):
... self.value_in_database = 0
...
... def youme_slow_database_access(self):
...返回self.value_in_database
...
... @财产
... def show(self):
...结果= self.very_slow_database_access()
... self.show =结果
...返回结果
...
上面的工作仅是因为属性与经典课程不起作用。如果
您使Cacher成为Newstyle类(从对象中继承)您会得到
一个属性。因此,我认为这要干净
使用__getAttr __()或
更改cacher
cacher类(对象):
def __init __(自我):
self._show =无
#...
@财产
def show(self):
结果= self._show
如果结果没有:
结果= self._show = self.very_slow_database_access()
返回结果
彼得
# 回答2


彼得·奥特(Peter Otten)在2008-11-13 09:03写道:
... def __init __(self):... self.value_in_database = 0 .......... def youne_slow_database_access(self):...返回self.value_in_database .......................................................... self):...结果= self.very_slow_database_access()... self.show =结果...返回结果...

上面的工作仅是因为属性与经典课程不起作用。如果
您使Cacher成为Newstyle类(从对象中继承)您会得到
一个属性。因此,我认为这要干净
使用__getAttr __()或
更改cacher
cacher类(对象):
def __init __(自我):
self._show =无
#...
@财产
def show(self):
结果= self._show
如果结果没有:
结果= self._show = self.very_slow_database_access()
返回结果
您还应该考虑根本不使用属性。
属性访问应该是快速的,如果有的话,仅由于原因
属性。
您的self.very_slow_database_access()呼叫可以提高各种
错误,可能需要花费太长时间 休闲用户会 期望写作打印(Cache.Show)。 最好将其写为方法,然后使用 用于缓存数据库读取值的实例属性。 - - 马克·安德烈·伦堡 egenix.com 直接来自来源的专业Python服务(2008年11月13日,#1) ______________________________________________________________________________________________________ ::::尝试MXODBC.ZOPE.DA Windows,Linux,Solaris,MacOSX免费! :::: egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48 D-40764德国Langenfeld。 首席执行官大队。 马克·安德烈·伦堡 在Amtsgericht Duesseldorf注册:HRB 46611

标签: python

添加新评论