func? just prints func.__doc__, nothing magic.<br><br>There&#39;s a simple, standard-library way to make wrapper functions: functools.wraps<br><a href="http://docs.python.org/library/functools.html#functools.wraps">http://docs.python.org/library/functools.html#functools.wraps</a><br>

<br clear="all">-Ken<br>
<br><br><div class="gmail_quote">On Tue, Jan 5, 2010 at 2:08 AM, Brent Pedersen <span dir="ltr">&lt;<a href="mailto:bpederse@gmail.com">bpederse@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><div></div><div class="h5">On Mon, Jan 4, 2010 at 10:53 PM, Tsviki Hirsh &lt;<a href="mailto:tsviki.hirsh@gmail.com">tsviki.hirsh@gmail.com</a>&gt; wrote:<br>
&gt; Dear list,<br>
&gt; The magic ? and ?? commands are among the most useful features in ipython<br>
&gt; (at least for me),<br>
&gt; I&#39;m also using them to read my selfdocumentation on my own functions.<br>
&gt; Therefore I was surprised to learn that you cannot read the doc string of a<br>
&gt; decorated function using ? or ??<br>
&gt; for example, consider this decorator and function<br>
&gt;<br>
&gt; def deco(f):<br>
&gt; &#39;&#39;&#39;decorator docstring&#39;&#39;&#39;<br>
&gt; def _deco(*args,**kwargs):<br>
&gt; &#39;&#39;&#39;decorator inner function docstring&#39;&#39;&#39;<br>
&gt; print &#39;args=&#39;,args<br>
&gt; return f(*args,**kwargs)<br>
&gt; return _deco<br>
&gt; @deco<br>
&gt; def myfunc(x,y):<br>
&gt; &#39;&#39;&#39;function docstring&#39;&#39;&#39;<br>
&gt; return x+y<br>
&gt;<br>
&gt; if I try to call myfunc docstring using ? I get:<br>
&gt;<br>
&gt; In [18]: exem.myfunc?<br>
&gt; Type: function<br>
&gt; Base Class: &lt;type &#39;function&#39;&gt;<br>
&gt; String Form: &lt;function _deco at 0x868a5a4&gt;<br>
&gt; Namespace: Interactive<br>
&gt; File: /home/tsviki/exem.py<br>
&gt; Definition: exem.myfunc(*args, **kwargs)<br>
&gt; Docstring:<br>
&gt;     decorator inner function docstring<br>
&gt;<br>
&gt; and if I try to call ??, it just gives me the decorator inner function.<br>
&gt; Is there a way to overlap this?<br>
&gt; linking the decorator __doc__ to myfunc.__doc__ won&#39;t help in case that I<br>
&gt; have several functions that use the same decorator.<br>
&gt; Any help?<br>
<br>
</div></div>hi,<br>
decorate your decorator :)<br>
<a href="http://pypi.python.org/pypi/decorator" target="_blank">http://pypi.python.org/pypi/decorator</a><br>
<br>
i think something like:<br>
<br>
from decorator import decorator<br>
<br>
@decorator<br>
<div class="im">def deco(f):<br>
    &#39;&#39;&#39;decorator docstring&#39;&#39;&#39;<br>
</div>    @decorator<br>
<div class="im">    def _deco(*args,**kwargs):<br>
        &#39;&#39;&#39;decorator inner function docstring&#39;&#39;&#39;<br>
        print &#39;args=&#39;,args<br>
        return f(*args,**kwargs)<br>
    return _deco<br>
<br>
<br>
<br>
<br>
</div><div class="im">&gt; Thanks a lot<br>
&gt; Tsviki Hirsh<br>
&gt;<br>
</div>&gt; _______________________________________________<br>
&gt; IPython-user mailing list<br>
&gt; <a href="mailto:IPython-user@scipy.org">IPython-user@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
&gt;<br>
&gt;<br>
_______________________________________________<br>
IPython-user mailing list<br>
<a href="mailto:IPython-user@scipy.org">IPython-user@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-user" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-user</a><br>
</blockquote></div><br>