Where does Python's pydoc help function get its content?
introspection, pydoc, python
Solution
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
Problem
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) ```