猿问

在Python中添加方法到装饰器

在这个关于我可以看到的文档中,有可能使用点表示法在装饰器上调用函数,例如,我可以调用:lru_cache

lru_cache_decorated_func.cache_info()

我试图实现的是用我的自定义函数创建我自己的装饰器来调用它的工作原理,并且像.cache_info()

那么,如何将这样的函数添加到装饰器中呢?


长风秋雁
浏览 86回答 1
1回答

拉风的咖菲猫

装饰器只不过是(或小于)可调用返回可调用[0]的可调用[0]@foodef bar():   ...与以下内容完全相同:def bar():    ...bar = foo(bar)有各种选项可以“智能化”装饰器,lru_cache所做的非常简单:它将装饰的函数包装在函数中wrapper然后它设置为该函数的属性wrapper并返回包装器(将原始函数交换为包装器)import functoolsdef foo(fn):    @functools.wraps(fn)    def wrapper(*args, **kwargs):        return fn(*args, **kwargs)    wrapper.thing = 'yay'    return wrapper@foodef bar(): ...print(bar.thing)将打印 .yay[0] 甚至一个不可调用的,如 或 的情况。@property@cached_property
随时随地看视频慕课网APP

相关分类

Python
我要回答