当前位置: 首页 > 后端技术 > Python

Python的cached_property装饰器

时间:2023-03-26 16:40:20 Python

直接上传源码,看了英文doc的意思:每个实例只计算一次属性,然后用普通属性替换自己。删除属性将重置该属性。classcached_property(object):"""每个实例只计算一次的属性,然后用普通属性替换自身。删除属性会重置属性。来源:https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76"""#noqadef__init__(self,func):self.__doc__=getattr(func,"__doc__")self.func=funcdef__get__(self,obj,cls):如果obj是valuen=Noneself:returnobj.__dict__[self.func.__name__]=self.func(obj)返回值实际上保存在实例字典__dict__中,避免了多次调用和重复计算。给出代码示例classTest(object):test1='aaa'def__init__(self):self.age=20@cached_propertydefreal_age(self):returnself.age+19if__name__=='__main__':t=Test()printt.real_age#39printt.__dict__#{'real_age':39,'age':20},如果没有装饰器,__dict__将不存在