I have a lot of callable objects and they all have the __doc__
string correctly filled out, but running help on them produces the help for their class instead of help based on __doc__
.
I want to change it so that running help on them produces customized help that looks essentially like what I would get if they were actual functions instead of instances of a class that implements __call__
.
In code, I'd like to make the output of this:
class myCallable:
def __init__(self, doc):
self.__doc__ = doc
def __call__(self):
# do some stuff
pass
myFunc = myCallable("some doco text")
help(myFunc)
Look more like the output of this:
def myFunc():
"some doco text"
# do some stuff
pass
help(myFunc)
The help
function (implemented in the pydoc
module) isn't prepared to find per-instance docstrings. I took a quick look through the module to see if there was a way to provide explicit help, but there doesn't seem to be. It uses the inspect
module to determine what kind of thing it is, and your myFunc doesn't look like a function, it looks like an instance. So pydoc prints help about the instance's class instead.
It'd be nice if similar to __doc__
you could add a __help__
attribute, but there's no support for that.
I hesitate to suggest it, but your best bet might be to define a new help
function:
old_help = help
def help(thing):
if hasattr(thing, '__help__'):
print thing.__help__
else:
old_help(thing)
and then put a __help__
attribute on your instances:
class myCallable:
def __init__(self, doc):
self.__doc__ = doc
self.__help__ = doc