我对以下代码片段的工作原理感到困惑?它是一个装饰器,它会懒惰地初始化属性,然后在下一个请求中使用缓存属性。看看代码,它似乎总是会调用self.method?一点点解释会有所帮助
class cached_property(object):
def __init__(self, method, name=None):
self.method = method
self.name = name or method.__name__
self.__doc__ = method.__doc__
def __get__(self, inst, cls):
if inst is None:
return self
result = self.method(inst)
setattr(inst, self.name, result)
return result
答案 0 :(得分:2)
对我而言,它似乎是第一次在result = self.method(inst)
周围调用该方法。然后,它将结果替换为实例上的方法:setattr(inst,self.name,result)
。
在后续的my_instance.my_cached_property
上,你实际上是访问方法的(初始)结果(作为常规属性)而不是描述符(原始方法和描述符类没有绑定到类,因为你覆盖了那个属性。)