【发布时间】:2021-08-19 04:22:42
【问题描述】:
基于this comment关于reify,
它的作用类似于@property,只是该函数只被调用一次;之后,该值被缓存为常规属性。这使您可以在不可变的对象上创建惰性属性。
我有这个自定义的 reify 类:
class reify(object):
def __init__(self, wrapped):
self.wrapped = wrapped
def __get__(self, inst):
if inst is None:
return self
val = self.wrapped(inst)
setattr(inst, self.wrapped.__name__, val)
return val
它的用法如下:
@reify
def user_details(self, user_id):
try:
# function that executes db query, returns dict
return user_details_from_id(self._dbconn, user_id)
except Exception as e:
pass
很明显,我们可以通过 name = self.user_details.get("name") 来使用它。
这按预期工作,但不确定这是缓存结果还是每次调用时都执行查询,我该如何确认?我的意思是这个实现是否正确? (没有数据库控制台)
【问题讨论】:
-
也许将执行数据库查询的函数替换为向控制台打印内容的函数?
-
当然可以,但我认为真正的问题是这个实现是否正确?
-
我建议的是一种验证方法。