国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Python, 這一個緩存裝飾器, 其執行流程是怎樣的?

瀏覽:72日期:2022-09-23 11:24:40

問題描述

2017/2/6

描述

比如, 考慮這樣一段代碼, 它的執行流程是怎樣的呢 ?

class Foo(object): @cached_property def foo(self):# calculate something important herereturn 42f = Foo()f.foof.foo 相關代碼

以class為基礎的緩存裝飾器

class cached_property(property): '''A decorator that converts a function into a lazy property. The function wrapped is called the first time to retrieve the result and then that calculated result is used the next time you access the value::class Foo(object): @cached_property def foo(self):# calculate something important herereturn 42 The class has to have a `__dict__` in order for this property to work. ''' # implementation detail: A subclass of python’s builtin property # decorator, we override __get__ to check for a cached value. If one # choses to invoke __get__ by hand the property will still work as # expected because the lookup logic is replicated in __get__ for # manual invocation. def __init__(self, func, name=None, doc=None):self.__name__ = name or func.__name__self.__module__ = func.__module__self.__doc__ = doc or func.__doc__self.func = func def __set__(self, obj, value):obj.__dict__[self.__name__] = value def __get__(self, obj, type=None):if obj is None: return selfvalue = obj.__dict__.get(self.__name__, _missing)if value is _missing: value = self.func(obj) obj.__dict__[self.__name__] = valuereturn value上下文環境

產品版本: Python2

操作系統: Linux

搜索

相似的問題: http://stackoverflow.com/ques...

問題解答

回答1:

cached_property 是 property 的subclass, 復寫了 __get__, __set__ 方法.

cached_property 是一個描述器(資料描述器),獲取屬性的時候優先從描述器獲取,即(__get__).

所以執行流程就是:f.foo -> __get__ -> 從實例字典(f.__dict__)獲取 -> 如果沒有則保存到字典并調用實際方法返回

回答2:

def cached_property(func): def _deco(*args, **kwargs):print(22222222222222)ret = func(*args, **kwargs) #這是調用foo方法print(44444444444444)return ret return _decoclass Foo(object): def __init__(self):print (111111111111111111) @cached_property def foo(self):print(3333333333333)return 42f = Foo()f.foo()

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲欧美日韩一区 | 久久久久久91 | 久久99精品久久久久久h | 久久 精品 一区二区 | 免费在线视频成人 | 欧美视频亚洲 | 在线观看人成午夜影片 | 爽爽爽爽爽爽a成人免费视频 | 精品自拍视频在线观看 | 在线亚洲精品国产成人二区 | 亚洲精国产一区二区三区 | 亚洲天堂美女 | 欧美色v | 日韩精品一区二区三区毛片 | 亚洲午夜在线播放 | 免费观看成人毛片 | 欧美成人一区二区三区在线视频 | 久久久这里只有精品免费 | 嫩草影院成人 | 成人国产在线视频在线观看 | 九九九九热精品视频 | 日韩一区二区三区在线免费观看 | 亚洲欧美视频在线 | 露脸 在线 国产 眼镜 | 国产成人一区二区视频在线观看 | 国产91精品久久久久久久 | 日韩一级欧美一级一级国产 | 日本视频在线观看不卡高清免费 | 欧美一级毛片片aa视频 | 国产一级在线观看www色 | 精品一区二区三区视频 | 久久成人免费观看全部免费 | 国产一区精品在线观看 | 视频在线亚洲 | 成人免费真人毛片视频 | www.日本在线| 日韩专区亚洲精品欧美专区 | 亚洲一区二区三区中文字幕 | 日韩在线观看不卡 | 久久受www免费人成看片 | 国产成人精品一区二区免费视频 |