[Python-Dev] Re: decorators and 2.4
David Abrahams
dave at boost-consulting.com
Sat Jun 26 14:43:18 EDT 2004
"Phillip J. Eby" <pje at telecommunity.com> writes:
>> @staticmethod
>> def foo(a,b,c):
>> pass
>>
>> [staticmethod]
>> def foo(a,b,c):
>> pass
>>
>>and
>>
>> def foo(a,b,c) [staticmethod]:
>> pass
>>
>>Hey - guess what? Writing them out like that, I find that my initial
>>preference for the 3rd one has gone. To be honest, I no longer have a
>>strong opinion between the three. In fact, if anything, I'd say I have
>>a very mild preference for Guido's option (number 2). I dislike the
>>ambiguity problem with it, though.
>
> IMO, the ambiguity is resolved if some kind of visible invocation occurs, e.g.:
>
> [declare_staticmethod()]
> def foo(a,b,c):
> pass
>
> While '[staticmethod]' by itself may appear to be a useless and
> ignorable statement, adding the () makes it clear that you have to
> know what the called function *does* before you could consider
> removing the statement.
>
> When you add in the fact that this syntax can be made to work in
> Python 2.2 and better, not just 2.4, it makes the syntax a big winner
> in my book.
>
> I would like to reverse the application order, though: Guido's patch
> uses the same order for syntax 2 as for syntax 3, and now that I've
> played with syntax 2 "for real", I think that right-to-left
> application should be used for any syntax where the decorators come
> before the 'def'.
Here's another syntactic idea that could be made to work without core
language changes:
[as.staticmethod]
def foo(a,b,c):
pass
I think that one's pretty sweet. It can be extended any number of
ways:
[as.staticmethod, as.classmethod, ...]
def foo(a,b,c):
pass
[as.staticmethod|classmethod| ...]
def foo(a,b,c):
pass
--
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com
More information about the Python-Dev
mailing list