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 truth"? > 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) 2 >>> f.attr 'Attribute' -- Steven -- http://mail.python.org/mailman/listinfo/python-list