python裝飾器擴充套件之functools.wraps
阿新 • • 發佈:2018-11-11
我們知道函式被裝飾器,裝飾後,所有的屬性,以及內建函式就失效了。
原因是函式型別變成了warpper型別
示例1:不帶wraps裝飾器示例
def warfunc(func): def warpper(*args,**kwargs): print('warpper demo') ret = func(*args,**kwargs) return ret return warpper @warfunc def demofunc(): print('func demo') demofunc()print(demofunc)
輸出結果:
D:\python36\python3.exe D:/untitled4/temp7.py warpper demo func demo <function warfunc.<locals>.warpper at 0x035432B8>
**從輸出結果標記紅色部分可以看出,這個函式型別是一個warpper裝飾器。那麼內建函式也失效了。如help(demofunc())
示例2:帶wraps裝飾器的
from functools import wraps def warfunc(func): @wraps(func)def warpper(*args,**kwargs): print('warpper demo') ret = func(*args,**kwargs) return ret return warpper @warfunc def demofunc(): print('func demo') demofunc() print(demofunc)
輸出結果:
D:\python36\python3.exe D:/untitled4/temp7.py warpper demo func demo<function demofunc at 0x038632B8>
**從輸出結果標記紅色部分,可以看出,這個型別是一個funciton;需要注意的引用包from functools import wraps