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

Kev*_*inP 5 python callable

我有一个定义 a 的类__call__,但是当用户在帮助返回时看到对这个“函数”的请求帮助时,他们获得了整个对象和方法,这可能有点令人生畏......我希望帮助看起来如果可能的话,更像是函数的帮助。

我跟踪了inspect模块,但似乎因为我不能从函数类型和/或方法类型继承,所以这可能不可行。我是否遗漏了什么,或者我是否必须重新安排代码以便我动态构建一个真正的 Python 函数对象?

Mar*_*ers 5

你想要的是不可行的。的help()信息(和inspect信息等)将其显示为与一类__call__方法中,不是一个函数。

如果你生成的对象除了调用之外不需要支持任何其他东西,你可以使用闭包来返回一个实际的函数:

def produce_callable(*args, **kw):
    instance = YourClass(*args, **kw)
    def callable_function(*args, **kw):
        """Docstring here"""
        return instance(*args, **kw)
    return callable_function
Run Code Online (Sandbox Code Playgroud)

因此,不是返回自定义类实例,而是返回一个将调用类实例的包装函数。help()将提供有关该功能的信息。

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