doctests and decorators

Steven D'Aprano steven at
Wed Jun 17 04:20:27 CEST 2009

On Tue, 16 Jun 2009 12:04:32 -0700, Scott David Daniels wrote:

> Eric Snow wrote:
>> In general should decorators always hide themselves?  I am guessing
>> not, otherwise this would already be part of their behavior.  Still, is
>> it the common case to camouflage the decorator like this?  If so, I
>> would expect it to be the default behavior of decorators.
> The Python goal is "no magic".  So, if you want the stuff wrapped, you
> do it (as the default traceback shows where the code actually goes). It
> would be far more complicated to display the truth if decorators
> defaulted to modifying the builtins, and you had to do magic to remove
> that part of the decoration.

I'm afraid I can't understand what you're saying. What do you consider 
"magic"? What's a "default traceback"? What do you mean, "display the 

> A decorator has _very_ simple semantics,
> while anything that automatically copied attributes would have funny
> semantics indeed for use by funny decorators like:

functools.wraps() automatically copies attributes:

>>> import functools
>>> def dec(func):
...     @functools.wraps(func)
...     def inner(*args):
...             return func(args) + 1
...     return inner
>>> def f(x):
...     return 1
>>> f.attr = "Attribute"
>>> f = dec(f)
>>> f(3)
>>> f.attr


More information about the Python-list mailing list