在这个关于我可以看到的文档中,有可能使用点表示法在装饰器上调用函数,例如,我可以调用:lru_cachelru_cache_decorated_func.cache_info()我试图实现的是用我的自定义函数创建我自己的装饰器来调用它的工作原理,并且像.cache_info()那么,如何将这样的函数添加到装饰器中呢?
1 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
装饰器只不过是(或小于)可调用返回可调用[0]的可调用[0]
@foo
def bar():
...
与以下内容完全相同:
def bar():
...
bar = foo(bar)
有各种选项可以“智能化”装饰器,lru_cache所做的非常简单:
它将装饰的函数包装在函数中wrapper
然后它设置为该函数的属性wrapper
并返回包装器(将原始函数交换为包装器)
import functools
def foo(fn):
@functools.wraps(fn)
def wrapper(*args, **kwargs):
return fn(*args, **kwargs)
wrapper.thing = 'yay'
return wrapper
@foo
def bar(): ...
print(bar.thing)
将打印 .yay
[0] 甚至一个不可调用的,如 或 的情况。@property@cached_property
添加回答
举报
0/150
提交
取消