使用高级技巧合并两个函数的签名。
项目描述
这个小库使用高级Python技巧来更改函数的签名,使其成为自身和被包装函数的混合体。它类似于functools.wraps,但允许包装函数将自己的参数添加到混合中。
用法
from merge_args import merge_args
def old(foo, bar):
"""This is old's docstring."""
print(foo, bar)
return foo + bar
@merge_args(old)
def new(prefix, foo, *args, **kwargs):
return old(prefix + foo, *args, **kwargs)
如果您运行help(new),则输出如下
Help on function new in module __main__:
new(prefix, foo, bar)
This is old's docstring.
它如何工作?
我写了一篇详细的博客文章,描述了此包的工作原理的细节
https://chriswarrick.com/blog/2018/09/20/python-hackery-merging-signatures-of-two-python-functions/
此模块受到了在#python(以前在freenode IRC上)的F4D3C0D3的启发。
许可证
版权所有 © 2018-2022,Chris Warrick。保留所有权利。
重新分发和使用源代码和二进制形式,无论是否修改,只要满足以下条件
源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。
二进制形式的重新分发必须在文档和/或其他与分发一起提供的材料中重新生产上述版权声明、本条件列表和以下免责声明。
未经作者或此软件贡献者的具体书面同意,不得使用此软件作者的名称或贡献者的名称来认可或推广由此软件派生的产品。
本软件由版权所有者和贡献者提供“现状”且不承担任何明示或暗示的保证,包括但不限于适销性和特定用途的适用性保证。在任何情况下,版权所有者或贡献者不应对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论损害原因如何以及根据何种责任理论,即使是因告知了此类损害的可能性而发生的。