• 解决使用装饰器后函数名称变成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__)

  • 相关阅读:
    mongodb的索引
    mongodb的简单操作
    mongodb的安装
    redis简单消息队列
    支持utf8的str_split函数
    php curl 传递数据
    linux 安装 ftp
    php des 对称加解密类
    13. Roman to Integer
    12. Integer to Roman
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14297709.html
Copyright © 2020-2023  润新知