Python:funtools模块、覆盖被装饰的函数模块名、名称、限定名、文档、参数注解
发布日期:2021-05-07 14:08:02 浏览次数:17 分类:原创文章

本文共 1511 字,大约阅读时间需要 5 分钟。

update_wrapper


def update_wrapper(wrapper, wrapped,assigned = WRAPPER_ASSIGNMENTS,updated = WRAPPER_UPDATES):

  • 类似copy_properties功能
  • wrapper 包装函数、被更新者,wrapped 被包装函数、数据源
  • 元组WRAPPER_ASSIGNMENTS中是要被覆盖的属性【'__module__', '__name__', '__qualname__', '__doc__', '__annotations__'】模块名、名称、限定名、文档、参数注解
  • 元组WRAPPER_UPDATES中是要被更新的属性,__dict__属性字典
  • 增加一个__wrapped__属性,保留着wrapped函数
import functoolsdef logger(fn):    def loger(*args,**kwargs):        "This funation logger"        print("函数开始运行")        ret = fn(*args,**kwargs)        print("函数结束")        return ret    functools.update_wrapper(loger,fn)    return loger@loggerdef add(x,y):    '''    This is funation add    '''    return x + yprint(add(3,6),add.__name__,add.__doc__)print(add.__wrapped__(4,6))   结果:函数开始运行函数结束9 add     This is funation add    10

 

wraps

@functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)

  • 类似copy_doc功能
  • wrapped 被包装函数
  • 元组WRAPPER_ASSIGNMENTS中是要被覆盖的属性【'__module__', '__name__', '__qualname__', '__doc__', '__annotations__'】模块名、名称、限定名、文档、参数注解
  • 元组WRAPPER_UPDATES中是要被更新的属性,__dict__属性字典
  • 增加一个__wrapped__属性,保留着wrapped函
import functoolsdef logger(fn):    @functools.wraps(fn)    def loger(*args,**kwargs):        "This funation logger"        print("函数开始运行")        ret = fn(*args,**kwargs)        print("函数结束")        return ret    return loger@loggerdef add(x,y):    '''    This is funation add    '''    return x + yprint(add(3,6),add.__name__,add.__doc__)print(add.__wrapped__(4,6))结果:函数开始运行函数结束9 add     This is funation add    10

 

上一篇:Python:类型注解、inspect
下一篇:Python:函数 ----》装饰器函数

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月05日 10时49分04秒