【发布时间】:2015-10-05 14:42:46
【问题描述】:
我有一个定义__call__ 的类,但是当用户在帮助返回时看到此“函数”的请求帮助时,他们会得到整个对象和方法,这可能有点令人生畏......我如果可能的话,希望帮助看起来更像函数的帮助。
我跟踪到inspect 模块,但似乎因为我不能从函数类型和/或方法类型继承,所以这可能不可行。我是否遗漏了什么,或者我必须重新安排代码以便动态构建真正的 Python 函数对象?
【问题讨论】:
我有一个定义__call__ 的类,但是当用户在帮助返回时看到此“函数”的请求帮助时,他们会得到整个对象和方法,这可能有点令人生畏......我如果可能的话,希望帮助看起来更像函数的帮助。
我跟踪到inspect 模块,但似乎因为我不能从函数类型和/或方法类型继承,所以这可能不可行。我是否遗漏了什么,或者我必须重新安排代码以便动态构建真正的 Python 函数对象?
【问题讨论】:
你想要的是不可行的。 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
因此,不是返回您的自定义类实例,而是返回一个将调用该类实例的包装函数。 help() 将提供该功能的信息。
我在callable_function() 签名中使用了*args 和**kw 通配符参数,但是如果您知道__call__ 方法接受哪些参数,您可以在您生成的函数中对它们进行硬编码。
【讨论】: