A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2004-August/047828.html below:

[Python-Dev] Decorators and docstrings

[Python-Dev] Decorators and docstringsBob Ippolito bob at redivi.com
Sun Aug 15 04:43:30 CEST 2004
On Aug 14, 2004, at 10:26 PM, Hans Nowak wrote:

> When playing with the decorators in 2.4a2, I saw the following 
> behavior:
>
> # wraps an object with the function, and prints this object
> # when the function is called.
> >>> def wrapwith(obj):
> ...     def decorator(f):
> ...         def _wrapper(*args, **kwargs):
> ...             print "##", obj
> ...             return f(*args, **kwargs)
> ...         return _wrapper
> ...     return decorator
> ...
> >>> @wrapwith("hello")
> ... def foo(x, y):
> ...     """ foo! """
> ...     return 2*x + y
> ...
> >>> foo(4, 5)
> ## hello
> 13
> >>> foo.__doc__
> >>>
>
> I.e. if you wrap the function foo with the decorator, it loses the 
> docstring. foo.__doc__ is empty.
>
> Is this behavior intended?  Should the decorator in question (in this 
> case, 'wrapwith') take care of copying of the docstring itself?  Or 
> should the decorator mechanism do this automatically (if possible)?

Decorators aren't that special.  If you want to return a function 
object that has the same doc string as the original then you're going 
to have to return the original object or explicitly make sure your new 
function object has the same doc string.  _wrapper.__doc__ = 
decorator.__doc__ before the return should probably do it.

I don't think that automatically setting a __doc__ string on the result 
object is a good idea at all because it could cause unnecessary 
problems for some result objects (instances of a class, for example).

-bob
More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4