長風(fēng)秋雁
2022-08-02 18:23:48
在這個(gè)關(guān)于我可以看到的文檔中,有可能使用點(diǎn)表示法在裝飾器上調(diào)用函數(shù),例如,我可以調(diào)用:lru_cachelru_cache_decorated_func.cache_info()我試圖實(shí)現(xiàn)的是用我的自定義函數(shù)創(chuàng)建我自己的裝飾器來調(diào)用它的工作原理,并且像.cache_info()那么,如何將這樣的函數(shù)添加到裝飾器中呢?
1 回答

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
裝飾器只不過是(或小于)可調(diào)用返回可調(diào)用[0]的可調(diào)用[0]
@foo
def bar():
...
與以下內(nèi)容完全相同:
def bar():
...
bar = foo(bar)
有各種選項(xiàng)可以“智能化”裝飾器,lru_cache所做的非常簡單:
它將裝飾的函數(shù)包裝在函數(shù)中wrapper
然后它設(shè)置為該函數(shù)的屬性wrapper
并返回包裝器(將原始函數(shù)交換為包裝器)
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] 甚至一個(gè)不可調(diào)用的,如 或 的情況。@property@cached_property
添加回答
舉報(bào)
0/150
提交
取消