gpt4 book ai didi

python - 如何覆盖python函数的默认帮助消息

转载 作者:太空狗 更新时间:2023-10-30 02:11:50 24 4
gpt4 key购买 nike

我有一个带有许多参数和详细帮助消息的函数,例如:

def worker_function(arg1, arg2, arg3):
""" desired help message:
arg1 - blah
arg2 - foo
arg3 - bar
"""
print arg1, arg2, arg3

我还有一个包装器函数,它执行一些计算,然后调用我的 worker_function,将所有参数按原样传递给它。

def wrapper_function(**args):
""" this function calls worker_function """
### do something here ...
worker_function(**args)

我希望包装函数的帮助消息(由 python 内置的 help() 函数显示)具有参数列表来自辅助函数的帮助消息。

我能得到的最接近的解决方案是:

wrapper_function.__doc__ += "\n\n" + worker_function.__doc__

这导致:

>>? help(wrapper_function)
Help on function wrapper_function in module __main__:

wrapper_function(**args)
this function calls worker function

desired help message:
arg1 - blah
arg2 - foo
arg3 - bar

但是这个描述缺少了重要的部分——参数列表,即:

worker_function(arg1, arg2, arg3)

(在现实生活中的函数中,参数列表很长,带有默认值,我希望它能自动显示)。

有没有办法在wrapper_function的帮助信息中添加参数列表或worker_function?

最佳答案

help() 使用 inspect 模块在内部查找函数数据。除非您默认覆盖函数元数据(如果可能的话),我认为您无法摆脱包装函数的定义。

然而,您可以做的是用包装函数的信息填充包装函数的帮助文本。您可以使用 inspect模块自己(特别是 getfullargspec 方法),或者你可以只使用 pydoc模块(这是 help 内部使用的)为您生成它。

import pydoc
def wrappedHelpText (wrappedFunc):
def decorator (f):
f.__doc__ = 'This method wraps the following method:\n\n' + pydoc.text.document(wrappedFunc)
return f
return decorator

@wrappedHelpText(worker_function)
def wrapper_function(**args):
worker_function(**args)

然后调用 help 将生成更有用的输出,包括原始签名。

>>> help(wrapper_function)
Help on function wrapper_function in module __main__:

wrapper_function(**args)
This method wraps the following method:

worker_function(arg1, arg2, arg3)
desired help message:
arg1 - blah
arg2 - foo
arg3 - bar

关于python - 如何覆盖python函数的默认帮助消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com