remaining decorator syntax options

Shalabh Chaturvedi shalabh at
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:
> (1)
> <indicator> dec1
> <indicator> dec2
> <indicator> dec3
> (2)
> <indicator> [dec1, dec2, dec3]
> (3)
> <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
> vs.
> @[dec1, dec2, dec3]
> and
> using dec1
> using dec2
> using dec3
> vs.
> 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

def myfunc():


using [staticmethod ,foo.moredecoration(a="hello",b="world"),]
def myfunc():

(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:

def myfunc():

In which case I am happier :)


More information about the Python-list mailing list