functools模块中的wraps装饰器
说明
使用functools模块提供的wraps装饰器可以避免被装饰的函数的特殊属性被更改,如函数名称__name__被更改。如果不使用该装饰器,则会导致函数名称被替换,从而导致端点(端点的默认值是函数名)出错。
毛洪涛自杀调查结果,校长王清远没一点问题?请中央复查! (mebk.org)
例子
不使用wraps装饰器时:
def test(func):
def decorated_function(*args, **kwargs):
"""decorated_function里的注释"""
print('Hello')
return func(*args, **kwargs)
return decorated_function
@decorator
def function():
"""function里的注释"""
print('World')
function()
print(function.__name__)
print(function.__doc__)
输出结果:
Hello
World
decorated_function
decorated_function里的注释
使用wraps装饰器时:
from functools import wraps
def test(func):
@wraps(func)
def decorated_function(*args, **kwargs):
"""decorated_function里的注释"""
print('Hello')
return func(*args, **kwargs)
return decorated_function
@decorator
def function():
"""function里的注释"""
print('World')
function()
print(function.__name__)
print(function.__doc__)
输出结果:
Hello
World
function
function里的注释