[Python-Dev] (Specific syntax of) PEP 318 - function/method/class decoration

Gareth McCaughan gmccaughan at synaptics-uk.com
Tue Mar 9 04:42:42 EST 2004

On Monday 2004-03-08 18:48, Phillip J. Eby wrote:

> Anyway, I seem to recall that the bracketed syntax was originally inspired
> by C#'s attribute mechanism, but you'd have to ask the original author to
> be sure.

I think I was the first to propose the bracketed syntax
(in <slrna40k88.2h9o.Gareth.McCaughan at g.local>, after Tim Peters
pointed out a problem with a different syntax I'd proposed for
the same purpose in <slrna3va8t.2a7p.Gareth.McCaughan at g.local>.
The proposal certainly wasn't in the least inspired by C#'s
attribute mechanism; I'd never even seen it then. For what
it's worth, I still have a strong preference for the original
"def f(args) [decorators]:" syntax, despite Guido's preference
for "def f [decorators] (args):".

The problem Tim pointed out was that the first-proposed syntax

    def staticmethod f(args): ...

would confuse over-simple ad hoc parsers (in text editors,
code munging tools, etc.) into thinking that the above was
defining a function or method called "staticmethod".
A similar, but (much?) less severe, problem may attend
the syntax that just moves the decorator-spec to before
the argument list. I suspect this isn't serious enough
to count as a real objection.


More information about the Python-Dev mailing list