Is there a way to generate IPython docstrings on the fly?

744 views Asked by At

I like that IPython will fetch docstrings if I type foo.bar?

However, I may sometimes build the foo.bar method dynamically, using foo.__getattr__. I could conceivably also generate a docstring dynamically, perhaps in a magic method like foo.__getdoc__.

Does IPython provide any mechanism for doing this, such that it would discover and display docstrings built on the fly?

2

There are 2 answers

1
Viktor Kerkez On BEST ANSWER

That has nothing to do with IPython, IPython just reads the __doc__ attribute of an object. If you dynamically create your objects in the __getattr__ method you should just set their __doc__ attribute as well and everything will work correctly in IPython.

Here is an example:

class A(object):
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return 'A[%s]' % self.name

class Test(object):
    def __getattr__(self, name):
        a = A(name)
        a.__doc__ = 'My a documentation'
        return a

In [11]: t = Test()
In [12]: t.foo
A[foo]
In [13]: t.foo?
Type:       A
String Form:A[foo]
Docstring:  My a documentation
0
tom10 On

You can set foo.__doc__ = "my doc string".