zoukankan      html  css  js  c++  java
  • 解决使用装饰器后函数名称变成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__)

  • 相关阅读:
    php yii多表查询
    [EA]反向工程
    [EA]入门教程
    [EA]DB数据逆向工程
    [MacromediaFlashMX]破解版下载
    [Git]Git-Github入门
    [github]Github上传代码
    [Apache]Windows下Apache服务器搭建
    [Apache]安装中出现的问题
    [ASP调试]小旋风Web服务器使用
  • 原文地址:https://www.cnblogs.com/zhuxibo/p/14297709.html
Copyright © 2011-2022 走看看