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

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


In <mailman.1834.1092791633.5135.python-list at python.org> Paul Morrow  
wrote:
> 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 
magical.

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

Yes. 

>    * 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 sas.com



More information about the Python-list mailing list