python 9-2 如何為被裝飾的函式儲存元資料,使用標準庫functools中的裝飾器wraps 裝飾內部包裹函式
阿新 • • 發佈:2019-02-20
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()