cached_property的使用
Posted pyhai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cached_property的使用相关的知识,希望对你有一定的参考价值。
cached_property修饰过的函数,变成是对象的属性,该对象第一次引用该属性时,会调用函数,对象第二次引用该属性时就直接从词典中取了,这也说明引用属性是经过__getattritue__。
class cached_property(object): """ Decorator that converts a method with a single self argument into a property cached on the instance. Optional ``name`` argument allows you to make cached properties of other methods. (e.g. url = cached_property(get_absolute_url, name=‘url‘) ) """ def __init__(self, func, name=None): self.func = func self.__doc__ = getattr(func, ‘__doc__‘) self.name = name or func.__name__ def __get__(self, instance, type=None): if instance is None: return self res = instance.__dict__[self.name] = self.func(instance) return res class Monopoly(object): def __init__(self): self.boardwalk_price = 500 @cached_property def boardwalk(self): # Again, this is a silly example. Don‘t worry about it, this is # just an example for clarity. self.boardwalk_price += 50 return self.boardwalk_price monopoly = Monopoly() print monopoly.boardwalk print monopoly.boardwalk print monopoly.boardwalk del monopoly.__dict__[‘boardwalk‘] print monopoly.boardwalk print monopoly.boardwalk
输出为:
*** Remote Interpreter Reinitialized *** >>> 550 550 550 600 600 >>>
以上是关于cached_property的使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 中使 @cached_property 无效
python 使用DriodBot工具时 pip安装包的问题 ImportError: cannot import name ‘cached_property‘ from ‘functools‘
python 使用DriodBot工具时 pip安装包的问题 ImportError: cannot import name ‘cached_property‘ from ‘functools‘
python 使用DriodBot工具时 pip安装包的问题 ImportError: cannot import name ‘cached_property‘ from ‘functools‘