如何调用 `functools.update_wrapper` 有哪些例子?

问题描述 投票:0回答:0

python网站

上有一些关于functools.wraps

的文档

但是,我无法看到一些示例。关于如何在不使用

functools.wrap
作为装饰器的情况下调用
functools.wraps
的三个用例(示例)是什么?

最好至少有一个尽可能简单的例子和至少一个非常复杂的例子。

复杂的例子不会使用函数参数的任何默认参数。

functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)

这里是一些没有任何示例或用例的文档

更新包装函数使其看起来像包装函数。可选参数是元组,用于指定原始函数的哪些属性直接分配给包装函数上的匹配属性,以及包装函数的哪些属性使用原始函数的相应属性进行更新。这些参数的默认值是模块级常量 WRAPPER_ASSIGNMENTS(分配给包装函数的

__module__
__name__
__qualname__
__annotations__
__doc__
,文档字符串)和 WRAPPER_UPDATES(更新包装器函数的dict,即实例字典)。

为了允许访问原始函数以进行内省和其他目的(例如绕过缓存装饰器,如 lru_cache()),此函数会自动向包装器添加一个

__wrapped__
属性,以引用被包装的函数。

此函数的主要用途是装饰器函数,它包装装饰函数并返回包装器。如果包装函数没有更新,返回函数的元数据将反映包装定义而不是原始函数定义,这通常没有帮助。

update_wrapper() 可以与函数以外的可调用对象一起使用。被包装的对象中缺少的任何在 assigned 或 updated 中命名的属性都将被忽略(即,此函数不会尝试在包装函数上设置它们)。如果包装函数本身缺少更新中命名的任何属性,仍然会引发 AttributeError。

python python-3.x decorator wrapper python-decorators
© www.soinside.com 2019 - 2024. All rights reserved.