有没有办法为定义 __call__ 的 python 对象定义文档字符串?

Is there a way to define the docstring for a python object that defines __call__?

我有一个 class 定义了一个 __call__,但是当用户在帮助 return 上看到对此 "function" 的请求帮助时,他们得到了整个对象和方法,它可能有点令人生畏...如果可能的话,我希望帮助看起来更像一个函数的帮助。

我顺着线索进入了inspect模块,但是好像不能继承函数类型and/or方法类型,所以这可能是行不通的。我是否遗漏了什么,或者我是否必须重新安排代码以便动态构建真正的 Python 函数对象?

你想要的是做不到的不。 help() 信息(和 inspect 信息等)将显示为 class 和 __call__ 方法,而不是函数。

如果您生成的对象除了调用之外不需要支持任何其他功能,您可以使用闭包 return 实际函数:

def produce_callable(*args, **kw):
    instance = YourClass(*args, **kw)
    def callable_function(*args, **kw):
        """Docstring here"""
        return instance(*args, **kw)
    return callable_function

因此,您 return 将调用 class 实例的包装函数,而不是 return 您的自定义 class 实例。 help() 将为该函数提供信息。

我在 callable_function() 签名中使用了 *args**kw 通配符参数,但是如果您知道 __call__ 方法接受哪些参数,您可以- 在您生成的函数中编写代码。