PEP 318: Can't we all just get along?

Kevin Smith Kevin.Smith at
Wed Aug 18 15:01:06 CEST 2004

In <mailman.1834.1092791633.5135.python-list at> Paul Morrow  
> Peter Hansen wrote:
> > Questions (for Kevin):
> 1. Would
>        def deco1 foo(a, b, c): pass
>     be the same as (just syntactic sugar for)
>        def foo(a, b, c): pass
>        foo = deco1(foo)
>     or would it mean something else?

Sorry, I guess I should have put the equivalent current Python code in 
my first post.  The example above is exactly what I meant.

> 2. Would
>        def deco1 deco2 foo(a, b, c): pass
>     be the same as
>        def foo(a, b, c): pass
>        foo = deco1(deco2(foo))
>     or
>        def foo(a, b, c): pass
>        foo = deco2(deco1(foo))

I would choose the first option since it's easier to transform the 
string "deco1 deco2 foo" to "deco1(deco2(foo))" while I'm reading it (i.
e. it fits my head :) ).

> 3. Would there be any restrictions on what a decorator could *do* to 
> the  method it was passed?  e.g. Could it change:
>    * the method's name (which could of course affect the method's
>      visibility: public|private|semi-private)?

Nope, beginners wouldn't understand it immediately.  That's just too 

>    * whether the method was a static, class, or instance method?


>    * the method's signature (formal parameter names, parameter order,
>      defaults values)?

I guess, in theory, it could since the object returned by the 
"decorator" (I really hate that term) could return a completely 
different object, but I wouldn't suggest it.

Kevin Smith
Kevin.Smith at

More information about the Python-list mailing list