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

  • 相关阅读:
    关于版权
    简易的命令行入门教程:
    安卓图标
    Flutter 第一次运行就出现白屏的问题
    解决应用白屏
    main.dart
    Hello World
    Flutter学习指南:UI布局和控件
    Flutter
    编译环境与生成环境的JDK版本不一样,报 java util zip ZipException error in op
  • 原文地址:https://www.cnblogs.com/jhpy/p/11774693.html
Copyright © 2011-2022 走看看