您的位置:首页 > 其它

装饰器装饰函数后恢复原函数名--两种方法

2018-06-09 15:16 555 查看
版权声明:本文为博主原创文章,转载请注明出处: https://blog.csdn.net/qq_31603575/article/details/80633183

装饰器装饰一个函数会改变函数的名字

def set_func(func):
def call_func(*args, **kwargs):
# 业务代码
print('xx')
return func(*args, **kwargs)

return call_func

@set_func
def func_test():
print("func_test")

if __name__ == '__main__':
print(func_test.__name__)

## result:   call_func

方式一:

使用__name__重新赋值
def set_func(func):
def call_func(*args, **kwargs):
# 业务代码
print('xx')
return func(*args, **kwargs)

call_func.__name__ = func.__name__
return call_func

@set_func
def func_test():
print("func_test")

if __name__ == '__main__':
print(func_test.__name__)

## result:   func_test

方式二:

使用functools.wrap()
import functools

def set_func(func):
@functools.wraps(func)
def call_func(*args, **kwargs):
# 业务代码
print('xx')
return func(*args, **kwargs)

return call_func

@set_func
def func_test():
print("func_test")

if __name__ == '__main__':
print(func_test.__name__)

## result: func_test
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: