zoukankan      html  css  js  c++  java
  • 装饰器修复技术

    @wraps作用,装饰器修复技术啥用?

    其实吧,装饰器在实现的时候,被装饰的函数已经是另一个人了,函数名和属性已经发僧改变.

    让我们来一探究竟

    from functools import wraps
    
    
    def wrapper(func):
        # @wraps(func)
        def inner(*args, **kwargs):
            print("装饰器工作中...")
            func(*args, **kwargs)
        return inner
    
    
    @wrapper
    def f1(arg):
        """
        这是一个测试装饰器修复技术的函数
        :param arg: 随便传
        :return: 没有
        """
        print(arg)
    
    f1('呵呵')
    print(f1.__name__,f1.__doc__) # 函数的名字,和注释
    

    打印结果:

    img

    可以发现打印的函数的名字和注释都变成了装饰器内部得了...

    本来你想要的是被装饰的函数的属性和名字啊,可是被改变了.

    那么我们就需要修复装饰器了

    form functools import wraps
    def wrapper(func):
        @wraps(func)
        def inner(*args, **kwargs):
            print("装饰器工作中...")
            func(*args, **kwargs)
        return inner
    
    
    @wrapper
    def f1(arg):
        """
        这是一个测试装饰器修复技术的函数
        :param arg: 随便传
        :return: 没有
        """
        print(arg)
    
    f1('呵呵')
    print(f1.__name__,f1.__doc__)
    

    img

    修复完成!!!
    总结:
    使用:当自定义装饰器的时候一定要从函数工具中导入修复装饰器的工具 from functool import wraps ,使用在装饰其内部
    作用及原因:装饰器可以修复被装饰器装饰的函数的名字,以及函数的注释.

  • 相关阅读:
    java实现文件上传下载至ftp服务器
    理解java代理模式
    [置顶] 理解java中的线程池
    wait,notify,非阻塞队列实现生产者,消费者模型
    理解java阻塞队列BlockingQueue
    CentOS下安装配置Nginx
    putty笔记
    CentOs下安装jdk、MySql、Redis笔记
    简述yum和apt-get的区别
    Linux 文件颜色说明
  • 原文地址:https://www.cnblogs.com/jhpy/p/11774693.html
Copyright © 2011-2022 走看看