remaining decorator syntax options
shalabh at cafepy.com
Tue Aug 10 23:04:34 CEST 2004
Steven Bethard wrote:
> *** List notation
> Assuming a pre-def, non-indented decorator, here are the remaining
> list notations:
> <indicator> dec1
> <indicator> dec2
> <indicator> dec3
> <indicator> [dec1, dec2, dec3]
> <indicator> dec1, dec2, dec3
> I believe that version 3 was vetoed because it makes it too hard to
> break lists of decorators across lines. GvR's preference is
> definitely for 1, but that may be influenced by his decision for the
> indicator. I have a feeling that how long the indicator is directly
> affects which of (1) or (2) is preferred. Compare:
> @[dec1, dec2, dec3]
> using dec1
> using dec2
> using dec3
> using [dec1, dec2, dec3]
> It seems like with a single symbol character, the non-list syntax is
> much more concise, and probably clearer. However with a keyword
> syntax the list seems the better option.
For short single names, yes. But also compare
using [staticmethod ,foo.moredecoration(a="hello",b="world"), foo.bar.baz()]
(I find the first version clearer.)
In some usability testing I did myself, I found that having one
decorator per line increased usability because:
1. All decorators line up at the left directly above the function name.
When you look at a function it's immediately visible how it is decorated
- no scanning required.
2. Moving and deleting decorators around is easy (cutting-pasting entire
lines is easier than parts of lines).
3. Adding decorators is easy (you just have to locate the start of a
line, not somewhere in the middle).
So I would not support multiple decorators per line.
Btw, I think your summary of the current state is good. However I feel a
new keyword has been pretty much ruled out as well.
Since there are a number of supporters of GvR's pie-decorator syntax
(myself being one of them), I doubt we will see anything else unless
most of us @-supporters are swayed. So I am happy, unless we end up with
the flagstaff syntax:
In which case I am happier :)
More information about the Python-list