[Python-Dev] Re: Another approach to decorators. (original) (raw)

David Abrahams dave at boost-consulting.com
Thu Aug 12 20:07:45 CEST 2004


Jp Calderone <exarkun at divmod.com> writes:

David Eppstein wrote:

In article <un011l2qz.fsf at boost-consulting.com>, David Abrahams <dave at boost-consulting.com> wrote:

class Foo:

decorate static: def static1(blah...): pass decorate locksFile: def static2andLocks(blah...): # both decorators appy pass Wow, Martin Z's idea (using your keyword) really went "thunk" for me. What decorate does would be very much like what "class" does in some ways. class: (and other something: constructs) start a block that can contain any code. Does this decorate keyword allow e.g. assignments as well as defs and other decorates? Or loops? If so what should it mean? Is it like that locals() gets replaced by a special dictionary-like-object that calls the decorator whenever any of its contents gets set? (I have no idea what the original poster intended, however....) 'decorate' expression ':' suite could create a nested scope, the locals of which could be passed to whatever "expression" evaluates to (or if it is a tuple, do the looping thing, since people seem to like that). The call can return a dict with which the class dict is updated.

That's almost exactly what I intended.

This covers a use case James Knight mentioned as well. As he pointed out, '@' and other proposals only decorate functions (and maybe classes, soon). The example he gave, I believe, was:

@public x = 1 This doesn't work, but: public: x = 1 would. Now, swallow that scream of horror (I did, barely ;).

No screams; I love it.

-- Dave Abrahams Boost Consulting http://www.boost-consulting.com



More information about the Python-Dev mailing list