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 ,使用在装饰其内部
    作用及原因:装饰器可以修复被装饰器装饰的函数的名字,以及函数的注释.

  • 相关阅读:
    读写文件流
    关闭和退出窗口
    有什么问题?
    将aspx页面转换成htm页面
    读取rss聚合文件
    运算符重载实例
    委托
    将 Visual Studio .NET 调试器用于 ASP.NET 应用程序
    输入的字符串进行有规则的清洗
    几个常用的数据库连接字符串
  • 原文地址:https://www.cnblogs.com/jhpy/p/11774693.html
Copyright © 2011-2022 走看看