<div>
                    Hi Tiago,
                </div><div><br></div><div><blockquote type="cite" style="border-left-style: solid; border-left-color: rgb(0, 33, 98); border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; color: rgb(0, 33, 98); margin-left: 0px; padding-left: 10px; padding-right: 0px; margin-right: 0px; "><div><div><div>I use IPython to provide a command line user interface to scientists.</div></div></div></blockquote><div><br></div><div>We use IPython for exactly the same thing (a command line user interface for astronomers, to be more exact!), and ran into the same issue.</div></div><div><br></div><div>Like Thomas said, you need to modify the pinfo behaviour for your class. We use the inspect_object decorator for this, as demonstrated in the code snippet below. (You would need to change the imports appropriately if you are using IPython 0.10 or earlier, but the functionality is the same.) Simply add an @inspect_object.when_type line for each class you want to override above the _our_doc function. We use the original pinfo for ?? functionality, as it is nice to be able to see the actual source code too.</div><div><br></div><div>Regards,</div><div>Ludwig</div><div><br></div><div><br></div><div><br></div><div><div>from IPython.core.interactiveshell import InteractiveShell</div><div>from IPython.external.simplegeneric import generic</div><div>from IPython.core.page import page</div><div><br></div><div>ip_shell = InteractiveShell.instance()</div><div><br></div><div># In order to override default docstring behaviour</div><div># we make pinfo a generic and then use decorators</div><div># in the code to override the docstring behaviour</div><div># when we are looking at one of our classes.</div><div># We keep a reference to the original pinfo in order</div><div># to handle the '.??' case which needs to use the</div><div># original code formatter.</div><div>original_pinfo = ip_shell.inspector.pinfo</div><div>ip_shell.inspector.pinfo = generic(original_pinfo)</div><div>inspect_object = ip_shell.inspector.pinfo</div><div><br></div><div>class OurClass(object):</div><div>&nbsp; &nbsp; """This is what we want to see."""</div><div>&nbsp; &nbsp; pass</div><div><br></div><div>@inspect_object.when_type(OurClass)</div><div># … add more classes here, e.g. @inspect_object.when_type(AnotherClass)</div><div>def _our_doc(obj, oname, formatter, info, **kw):</div><div>&nbsp; &nbsp; if kw['detail_level'] == 1:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; original_pinfo(obj, oname, formatter, info, **kw)</div><div>&nbsp; &nbsp; elif obj.__doc__:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; page(obj.__doc__)</div><div><br></div><div>In [2]: ip_shell? &nbsp;&nbsp;</div><div>Type: &nbsp; &nbsp; &nbsp; TerminalInteractiveShell</div><div>Base Class: &lt;class 'IPython.frontend.terminal.interactiveshell.TerminalInteractiveShell'&gt;</div><div>String Form:&lt;IPython.frontend.terminal.interactiveshell.TerminalInteractiveShell object at 0x10371e590&gt;</div><div>Namespace: &nbsp;Interactive</div><div>File: &nbsp; &nbsp; &nbsp; /Library/Python/2.7/site-packages/ipython-0.12.dev-py2.7.egg/IPython/frontend/terminal/interactiveshell.py</div><div>Docstring: &nbsp;&lt;no docstring&gt;</div><div><br></div><div>In [3]: obj = OurClass()</div><div><br></div><div>In [4]: obj?</div><div>This is what we want to see.</div><div><br></div><div>In [5]: obj??</div><div>Type: &nbsp; &nbsp; &nbsp; OurClass</div><div>Base Class: &lt;class '__main__.OurClass'&gt;</div><div>String Form:&lt;__main__.OurClass object at 0x1038a39d0&gt;</div><div>Namespace: &nbsp;Interactive</div><div>File: &nbsp; &nbsp; &nbsp; /Library/Python/2.7/site-packages/ipython-0.12.dev-py2.7.egg/IPython/core/fakemodule.py</div><div>Docstring: &nbsp;This is what we want to see.</div></div><div><br></div>