[Python-Dev] Re: PEP 318: Decorators last before colon (original) (raw)

Robert Brewer fumanchu at amor.org
Mon Apr 5 02:37:39 EDT 2004


Guido van Rossum wrote:

...while far from perfect, in terms of readability setting function attributes in a decorator is so much better than setting them after the function has been defined, that I believe we have no choice but to provide it.

The more I read statements like this, the more I think of replacing:

def foo(arg1, arg2): pass foo = classmethod(foo) foo.attrA = 3

...with code like:

foo = classmethod() foo.attrA = 3 def foo(arg1, arg2): pass

...the meaning of "def" changes from "make a function" to "bind this suite to foo". OBVIOUSLY, this would be a huge change as I've written it. But perhaps, having seen this ideal, a middle ground might become more visible.

I also note that accepting decorator-before-colon now would make it harder to come up with a decent syntax for declaring the return type, which I still want to do in some future version of Python with optional (!) static typing. But not impossible -- there's enough punctuation available besides '[' and ':'.

Why would such additional features not be standard attributes of function objects?

foo = function() foo.returns(int) def foo(arg1): return int(arg1)

All in all, I'd prefer that function decorators and attributes use simple, known techniques like assignment and callables (as shown above), than become monolithic, crystallized all-in-one statements like:

def foo(arg1 as str, arg2 as int) returns str [classmethod] {attrA: 3}:

I understand the desire to keep all those bits near each other on the page, but stronger is my desire to make them independent statements. If we could bind a "blank" function object and supply its actual codeblock in a later statement, the rest falls magically into place, IMO.

Just some thoughts.

Robert Brewer MIS Amor Ministries fumanchu at amor.org



More information about the Python-Dev mailing list