2

我对以下代码片段感到困惑,它是如何工作的?它是一个装饰器,它会延迟初始化属性,然后在下一个请求中使用缓存的属性。看代码,好像总是会调用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
4

1 回答 1

2

对我来说,它看起来像是第一次调用该方法result = self.method(inst)。然后它用结果替换实例上的方法: setattr(inst,self.name,result).

在随后my_instance.my_cached_property,您实际上访问的是方法的(初始)结果(作为常规属性),而不是描述符(原始方法和描述符类没有绑定到该类,因为您覆盖了该属性)。

于 2012-10-15T14:05:34.080 回答