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

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

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

猜你喜欢

转载自blog.csdn.net/qq_31603575/article/details/80633183