[Python-Dev] Suggesting '.' decorators (PEP318) (original) (raw)
Kevin J. Butler python-kbutler at sabaydi.com
Sat Aug 7 06:55:35 CEST 2004
- Previous message: [Python-Dev] Re: Decorators: vertical bar syntax
- Next message: [Python-Dev] Suggesting '.' decorators (PEP318)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Many people wrote: > Lots of options
I haven't seen this mentioned, so I'm going to throw in my suggestion.
The following makes sense to me, uses previously invalid syntax, and uses the '.' punctuation in a way similar to existing/proposed usage:
def longMethodNameForEffect(longArgumentOne=None,
longArgumentTwo=42):
.staticmethod
.funcattrs(grammar="'@' dotted_name [ '(' [arglist] ')' ]",
status="experimental", author="BDFL")
"""
asdfasdf
"""
raise NotYetImplemented
If we want to allow one-liner decorators (questionable to me):
def myMethod(self): .staticmethod
raise NotYetImplemented
Advantages/disadvantages of positioning at start of block:
Unambiguous "target" for decorators, matches Python's precedents for indentation and modify-what-came-before
Decorators won't get lost in long argument lists (they are indented differently in Guido's preferred formatting, and are separated by the smiley in the all-args-on-individual-lines formatting)
Separate from def syntax (to keep def the same avoiding breakage)
0 Perhaps decorators should be allowed before or after the docstring. If you have to choose, I'd choose making it before the docstring.
No extra cut-and-paste issues, no extra indentation level.
No smileys. (Does that get a :) or a ]: ?)
Advantages/disadvantages of .decorators:
Will not be silently ignored (doesn't use currently legal syntax)
Simple for simple decorators, supports complex decorators as cleanly as possible
Less ugly (YMMV). Doesn't feel like executable line noise (to 1 out of 1 pythonistas polled...)
No new punctuation or keywords (avoids breaking Leo/IPython/existing code)
Really nice syntax for assigning attributes, if desired (Not sure I like this overloading, but it /looks/ good)
def func(): .author = "Kevin Butler" pass
+/0 Syntax obvious visually (Someone will complain that the leading period gets lost - that person should switch to a fixed-width font, as used when coding. <.5 wink>) Easy to highlight.
0 Although it is a punctuation-based syntax, it is compatible with existing/proposed '.' usage ('.' can mean subordination to a containing construct like 'with', and passing the implicit "func" argument is analogous to passing "self")
0 Compatible with some future "with ...:" syntax, as decorators must immediately follow a 'def ...:' (or possibly a 'class ...:'), so if there is a 'with ...:' what follows cannot be a decorator.
Minor extension to use of '.'
Some people may have too much dust on their monitors
Misc items from the PEP applied to .decorators:
One decorator per line
Could use ".doc()" or ".doc = " as a docstring alternative
?+ Compile time (? as much as the @ syntax is?)
- Works in interactive mode
Public or private feedback appreciated, I will summarize private feedback to the list.
kb
- Previous message: [Python-Dev] Re: Decorators: vertical bar syntax
- Next message: [Python-Dev] Suggesting '.' decorators (PEP318)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]