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]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‘

微信小程序代码片段