我有一个定义__call__的类,但是当用户在帮助返回中看到针对该“功能”的请求帮助时,他们会得到整个对象和方法,这可能有点令人生畏…我希望获得帮助如果可能的话,看起来更像是函数的帮助.
我跟踪了检查模块的内容,但由于无法继承函数类型和/或方法类型,因此这似乎不可行.我是否缺少某些东西,还是必须重新排列代码,以便动态构建真正的Python函数对象?
解决方法:
你想要的是行不通的. help()信息(和检查信息等)会将其显示为带有__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__方法接受了哪些参数,则可以在产生的函数中对其进行硬编码.