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__)