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

  • 相关阅读:
    正则表达式简介
    每个程序员都必须遵守的编程原则
    String, StringBuffer, StringBuilder
    一些软件设计的原则
    A hard puzzle ACM HDU1097
    ACM HDU 1032The 3n + 1 problem
    Humble Numbers HDU 1058 ACM
    ACM HDU 1028Ignatius and the Princess III
    HangOver ACM HDU1056
    ACM HDU 1021Fibonacci Again
  • 原文地址:https://www.cnblogs.com/jhpy/p/11774693.html
Copyright © 2011-2022 走看看