1. 程式人生 > >python 9-2 如何為被裝飾的函式儲存元資料,使用標準庫functools中的裝飾器wraps 裝飾內部包裹函式

python 9-2 如何為被裝飾的函式儲存元資料,使用標準庫functools中的裝飾器wraps 裝飾內部包裹函式

9-2 如何為被裝飾的函式儲存元資料

解決方案:
使用標準庫functools中的裝飾器wraps 裝飾內部包裹函式,可以
制定將原函式的某些屬性,更新到包裹函式的上面
其實也可以通過

wrapper.name = func.name
update_wrapper(wrapper, func, (‘name‘,’doc‘), (‘dict‘,))

f.name 函式的名字
f.doc 函式文件字串
f.module 函式所屬模組名稱
f.dict 函式的屬性字典
f.defaults 預設引數元組
f.closure 函式閉包


from functools import
wraps,update_wrapper def log(level="low"): def deco(func): @wraps(func) def wrapper(*args,**kwargs): ''' I am wrapper function''' print "log was in..." if level == "low": print "detailes was needed" return func(*args,**kwargs) #wrapper.__name__ = func.__name__
#update_wrapper(wrapper, func, ('__name__','__doc__'), ('__dict__',)) return wrapper return deco @log() def myFunc(): '''I am myFunc...''' print "myFunc was called" print myFunc.__name__ myFunc()