python加载函数包_Python wrapt包_程序模块 - PyPI - Python中文网
快速啟動
要實現decorator,首先需要定義一個包裝函數。
每次調用修飾函數時都會調用此函數。包裝紙
函數需要四個位置參數:wrapped-包裝函數,包裝函數依次需要調用它。
instance-調用包裝函數時綁定到的對象。
args-調用修飾函數時提供的位置參數列表。
kwargs-調用修飾函數時提供的關鍵字參數字典。
包裝器函數可以做它需要做的任何事情,但是通常
調用通過^{tt2}傳入的包裝函數$
爭論。
然后需要將decorator@wrapt.decorator應用于包裝器
函數將其轉換為decorator,而decorator又可以應用于
其他功能。import wrapt
@wrapt.decorator
def pass_through(wrapped, instance, args, kwargs):
return wrapped(*args, **kwargs)
@pass_through
def function():
pass
如果希望實現接受參數的decorator,請將
函數閉包中裝飾器的定義。提供的任何參數
當decorator被應用時,將可用于
調用包裝函數時的內部包裝。import wrapt
def with_arguments(myarg1, myarg2):
@wrapt.decorator
def wrapper(wrapped, instance, args, kwargs):
return wrapped(*args, **kwargs)
return wrapper
@with_arguments(1, 2)
def function():
pass
當應用于普通函數或靜態方法時,包裝器函數
調用時將傳遞None作為instance參數。
當應用于實例方法時,調用的包裝函數將
將調用方法的類的實例作為
instance參數。即使實例方法
通過類顯式調用,實例作為第一個
爭論。也就是說,實例永遠不會作為args的一部分傳遞。
當應用于類方法時,調用的包裝函數將
傳遞類類型作為instance參數。
當應用于類時,將傳遞調用時的包裝函數
None作為instance參數。這里的wrapped參數
凱斯將是全班同學。
上面的規則可以用下面的例子來總結。import inspect
@wrapt.decorator
def universal(wrapped, instance, args, kwargs):
if instance is None:
if inspect.isclass(wrapped):
# Decorator was applied to a class.
return wrapped(*args, **kwargs)
else:
# Decorator was applied to a function or staticmethod.
return wrapped(*args, **kwargs)
else:
if inspect.isclass(instance):
# Decorator was applied to a classmethod.
return wrapped(*args, **kwargs)
else:
# Decorator was applied to an instancemethod.
return wrapped(*args, **kwargs)
因此,使用這些檢查可以創建一個通用的decorator
這可以應用于所有情況。不再需要創建
普通函數和實例方法的decorator的不同變體,
或者使用其他包裝器將函數裝飾器轉換為
將適用于實例方法。
在所有情況下,傳遞給包裝函數的包裝函數都被調用
以同樣的方式,傳遞args和kwargs。這個
instance參數不需要用于調用包裝的
功能。
總結
以上是生活随笔為你收集整理的python加载函数包_Python wrapt包_程序模块 - PyPI - Python中文网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rk3399硬件设计指南_CMMI2实施
- 下一篇: python画图中grid等于true_