使用Python裝飾器實現(xiàn)修復(fù)的方法?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
Python裝飾器(decorator)在實現(xiàn)的時候,被裝飾后的函數(shù)其實已經(jīng)是另外一個函數(shù)了(函數(shù)名等函數(shù)屬性會發(fā)生改變),
為了不影響,Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decorator的時候,最好在實現(xiàn)之前加上functools的wrap,
它能保留原有函數(shù)的名稱和docstring。
未加@wraps的時候:
from functools import wraps def wrapper(func): # @wraps(func) def inner(*args, **kwargs): print("裝飾器工作中...") func(*args, **kwargs) return inner @wrapper def f1(arg): """ 這是一個測試裝飾器修復(fù)技術(shù)的函數(shù) :param arg: 隨便傳 :return: 沒有 """ print(arg) f1('呵呵') print(f1.__name__,f1.__doc__)