[Python-Dev] PEP 318: Decorators last before colon (original) (raw)

Phillip J. Eby pje at telecommunity.com
Tue Mar 30 19:17:14 EST 2004


At 03:43 PM 3/30/04 -0800, Guido van Rossum wrote:

> Hm. So if we reversed the order so that the outermost decorators (such as > classmethod) come first in the list, would that sway you to relent in favor > of decorators-after-arguments?

Not really, because they're still hidden behind the argument list.

Because:

  1. it won't be on the same line if there are lots of arguments
  2. nobody will read past the argument list
  3. other
  4. all of the above
  5. none of the above

(Not trying to change your opinion; I just think the answer to this should go in the PEP.)

> I don't like the reversed order, but I think I'd be a lot more > comfortable with explaining that relatively minor semantic oddity to > other developers than I would be with trying to explain the major > syntactic oddity (relative to the rest of the Python language) of > decorators-before-def.

OTOH to C# programmers you won't have to explain a thing, because that's what C# already does.

Correct me if I'm wrong, but I don't believe C# attributes have anything like the same semantics as Python decorators; in fact I believe they may be more akin to Python function attributes! So, even to a C# programmer, I'll have to explain Python's semantics. Indeed, the C# syntax has things like this:

[ReturnValue: whatever(something)]

to specify what the attributes apply to, and they can be applied to parameters, the return value, the module as a whole, etc. But I don't want to get too far off-topic.

By the way, you didn't mention whether it's okay to put the decorators on the same logical line, e.g.:

[classmethod] def foo(bar,baz): # body goes here

If the rationale here is that we're copying C#, I'd think that it should be permissible, even though it looks a bit ugly and tempts me to indent the body to align with the function name.



More information about the Python-Dev mailing list