解决使用装饰器后函数名称变成inner的情况

def dynamic_report(target01,target02):
    '''
    带参装饰器
    :param target: 装饰器传进来的参数
    :return:
    '''
    def decorate(fun):
        def inner(*args,**kwargs):
            print('调用时候传进来的参数',target01,target02)
            fun(*args,**kwargs)
            print('调用后传进来的参数',target01,target02)
        return inner

    return decorate

@dynamic_report('zxb','zxl')
def method(a,b):
    print('method方法',a+b)

if __name__ == '__main__':
    method(1,2)
    print(method.__name__)

 

 method的函数名称为什么变成inner了,因为 #method=decorate(method) 函数返回名称为inner因此我们得到函数的名称就是inner

解决办法:

  引入import functools 模块 使用装饰器 @functools.wraps(fun),将函数名称传进去就解决了,如下图

def dynamic_report(target01,target02):
    '''
    带参装饰器
    :param target: 装饰器传进来的参数
    :return:
    '''
    def decorate(fun):
        @functools.wraps(fun)
        def inner(*args,**kwargs):
            print('调用时候传进来的参数',target01,target02)
            fun(*args,**kwargs)
            print('调用后传进来的参数',target01,target02)
        return inner

    return decorate

@dynamic_report('zxb','zxl')
def method(a,b):
    print('method方法',a+b)

if __name__ == '__main__':
    method(1,2)
    print(method.__name__)

 

posted @ 2021-01-19 14:14  西西cc  阅读(108)  评论(0编辑  收藏  举报