@wraps(view_func)的作用: 不改变使用装饰器原有函数的结构(如name, doc)
- 不适用@wraps 的时候
def decorator(func): """this is decorator __doc__""" def wrapper(*args, **kwargs): """this is wrapper __doc__""" print("this is wrapper method") return func(*args, **kwargs) return wrapper @decorator def test(): """this is test __doc__""" print("this is test method") print("__name__: ", test.__name__) print("__doc__: ", test.__doc__) """ 结果: __name__: wrapper __doc__: this is wrapper __doc__ """
2.使用@wraps 的时候
from functools import wraps def decorator(func): """this is decorator __doc__""" @wraps(func) def wrapper(*args, **kwargs): """this is wrapper __doc__""" print("this is wrapper method") return func(*args, **kwargs) return wrapper @decorator def test(): """this is test __doc__""" print("this is test method") print("__name__: ", test.__name__) print("__doc__: ", test.__doc__) """ 结果: __name__: test __doc__: this is test __doc__ """