[Python-Dev] Call for defense of @decorators
Phillip J. Eby
pje at telecommunity.com
Thu Aug 5 20:41:38 CEST 2004
At 10:14 AM 8/5/04 -0700, Guido van Rossum wrote:
>[Phillip]
> > Does this mean that the C#-style syntax has a chance if it's got a
> > __future__? :)
>
>I don't see how that would change the arguments against it.
I thought the primary argument against it was that it changes the meaning
of (potentially existing) Python code, and that you had rejected the "hard
to learn" argument on the basis that people learn by pattern-matching
rather than principle.
I guess this is another reason to update the PEP... :)
>No, but I suggest that the proponents of syntax alternatives will have
>to agree amongst themselves on a single alternative that they can
>present to me.
I think that will pretty much guarantee that it's either @ or nothing: it
appears that the two biggest (or at least most vocal) camps are:
1. people who want a "simpler" syntax that doesn't support arguments (who
seem to mostly favor 'def classmethod foo()')
2. people who think that decorators without arguments are pointless, and
don't agree amongst themselves on the proper syntax, but don't necessarily
care that much as long as there *is* one. (But there may be a slight
leaning towards either of the C#-inspired variants.)
Personally, I think the C# list-before-function syntax is, on balance, the
best of all the choices explored throughout the whole tangled history of
PEP 318. It's visually attractive, doesn't *break* the parsing of existing
tools (that may see '@' as a syntax error), and doesn't interfere with
grepping for functions. The "learning" argument was done to death before
you even invented the syntax: *any* decorator choice results in having to
learn *something*.
Of course, I suppose that nearly all of these can be turned into opposite
arguments, for example that '@' causing breakage is a good thing, because
it means you'll get an error sooner (e.g. if you run the program under an
older Python). And round and round the argument goes. And every so often,
somebody invents a new syntax, for example:
foo = classmethod(
def foo(cls):
return 42
)
and then some people love it, and some hate it, and there we go back on the
merry-go-round. Sigh. Just Pronounce on *something* and put us all out of
your misery already. :)
More information about the Python-Dev
mailing list