@decorators
David Fraser
davidf at sjsoft.com
Fri Aug 6 08:43:04 EDT 2004
daishi wrote:
> For what it's worth:
>
> As far as I know, the proposed @decorator syntax will be the first
> time that two logical lines of python with the same indentation will
> not be independent of one another. Previously, when looking at:
>
> some_python(code)
> and_some_more = stuff
>
> there was no need to look at the the first line in order to know what
> the second line meant/did (and vice versa). It would seem that the
> cases when there are effects across multiple logical lines is captured
> in compound statements:
>
> """
> Compound statements contain (groups of) other statements; they affect
> or control the execution of those other statements in some way.
> """ -Python Reference Manual
>
> My understanding of decorators is that they fit this definition.
> One thing that I am not entirely clear about is whether decorators
> are intended to be a compound statement themselves, or whether they
> are meant to simply be extensions of current compound statements
> such as function definition (and class definitions?)
>
> In either case, however, it seems that the following should apply:
>
> """
> Each clause header begins with a uniquely identifying keyword and ends
> with a colon. A suite ... can be one or more indented statements on
> subsequent lines.
> """ -Python Reference Manual
>
> In the first case where decorators form their own compound statement,
> this would seem to imply the basic layout of:
>
> @decorator:
> def foo():
> pass
>
> (Whether that uniquely identifying keyword for decorators happens to
> be spelled '@' is not important to me.)
>
> In the second case where decorators are simply extensions of current
> compound statements, the current wording of the Python Reference
> Manual would seem to imply that for function definition the clause
> header must begin with 'def'. I.e., the decorator should not come
> before the def, and certainly not on a separate line. Beyond this,
> however, for me it is not particularly important whether the
> decorator comes before/after the function name/argument list, and
> how it is delimited.
>
> I guess the basic point that I am trying to make is that what I find
> important is consistency with the basic visual layout of code promised
> (IMHO) by python. I believe that this promise is violated by the
> currently proposed decorator scheme.
>
> d
>
> PS: Although I believe the current view of the implementors is to view
> decorators as an extension to function definition, I believe that the
> separate compound statement view is fairly rich. As others have noted,
> it can make identical decorations simpler:
>
> @static,synchronized:
> def foo():
> pass
> def bar():
> pass
I like this idea. What about using the list syntax instead of the @ syntax:
[decorator]:
def foo():
pass
[static, synchronized]:
def foo():
pass
def bar():
pass
[static,
synchronized,
types(int, int),
returns(None)
]:
def foo():
pass
This would then take away the argument against a valid list before a def
being valid python but not previously having any effect...
Or for good measure you could add a keyword:
declare [static, synchronized, types(int, int), returns(None)]:
def foo():
pass
def bar():
pass
Now that looks pretty neat
David
More information about the Python-list
mailing list