cached

    技术2025-07-11  13

    缓存装饰器

    class cached_property(object): def __init__(self, func, name=None): self.func = func self.__doc__ = getattr(func, '__doc__') self.name = name or func.__name__ def __get__(self, instance, cls=None): if instance is None: return self print(self) print(self.func) # function User.getWorkYear print(instance) # <__main__.User object # self.func(instance) 相当于 getWorkYear(user) # 调用示例方法 getWorkYear 把 自己传进去 # getWorkYear(self) = getWorkYear(instance) = self.func(instance) res = instance.__dict__[self.name] = self.func(instance) return res class User(object): def __init__(self, age=0): self.age = age @cached_property def getWorkYear(self): return 65 - self.age user = User(20) print(user.__dict__) print(user.getWorkYear) # 45 # print(user.getWorkYear()) # error print(user.__dict__) # {'age': 20, 'getWorkYear': 45} print(user.getWorkYear) # 45

    {‘age’: 20} <main.cached_property object at 0x000002A8D3462898> <function User.getWorkYear at 0x000002A8D3459D08> <main.User object at 0x000002A8D34628D0> 45 {‘age’: 20, ‘getWorkYear’: 45} 45

    cached_property主要实现的功能是,user.getWorkYear第一次会进行计算,计算完之后把实例user的__dict__[‘getWorkYear’]设置为计算后的值。下次读值的时候会直接从__dict__[‘getWorkYear’]取结果,避免了多次计算。 使用限制:只能用于只带默认参数的类

    Processed: 0.010, SQL: 9