【问题标题】:Function name of wrapped function? [duplicate]包装函数的函数名? [复制]
【发布时间】:2015-08-28 06:21:18
【问题描述】:

如何获取原始函数的名称?

def wrap(f):
    def wrapped_f(*args, **kwargs):
        # do something
    return wrapped_f

@wrap
def A(params):
   # do something

print(A.__name__)

结果:wrapped_f,但我需要 A!

【问题讨论】:

    标签: python


    【解决方案1】:

    使用functools.wraps():

    直接来自文档:

    如果不使用这个装饰器工厂,示例函数的名称将会是 'wrapper',并且原始 example() 的文档字符串将会丢失。

    示例:

    from functools import wraps
    
    
    def wrap(f):
        @wraps(f)
        def wrapped_f(*args, **kwargs):
            pass
        return wrapped_f
    
    
    @wrap
    def A(params):
        pass
    
    
    print(A.__name__)
    

    输出:

    $ python -i foo.py
    A
    >>> 
    

    【讨论】:

      【解决方案2】:

      使用functools.wraps 或手动更新wrapped_f 的__name__ 属性。

      from functools import wraps
      
      def wrap(f):
          @wraps(f)
          def wrapped_f(*args, **kwargs):
              # do something
          return wrapped_f
      
      @wrap
      def A(params):
         # do something
      
      print(A.__name__)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-20
        • 2018-10-12
        • 1970-01-01
        • 2020-08-31
        • 2021-11-04
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多