[Python-Dev] method decorators (PEP 318)
Skip Montanaro
skip at pobox.com
Sat Mar 27 13:11:40 EST 2004
Barry> attributes, but decorators can also do the trick in a nasty way:
Barry>
Barry> def foobar [
Barry> lambda f: f.author = 'Guido van Rossum',
Barry> lambda f: f.deprecated = True,
Barry> classmethod] (self, arg):
Barry> # Now what?
Alex> Not necessarily all that nasty:
Alex> def foobar [ with_attributes(
Alex> author="Guido van Rossum",
Alex> deprecated=True),
Alex> classmethod] (cls, args):
Alex> pass
Both cases demonstrate why I don't like the decorator-before-args option.
Where are the args? Like I said in an earlier post most of the time I look
at a function def wanting a quick reminder how to call it. If the argument
list doesn't at least start on the same line as the def I think that will be
tougher.
Alex> with a built-in 'with_attributes' equivalent to:
Alex> def with_attributes(f, **kwds):
Alex> for k, v in kwds.iteritems():
Alex> setattr(f, k, v)
Alex> return f
Not quite. It has to be written as a function which returns another
function, e.g.:
def attrs(**kwds):
def decorate(f):
f.__dict__.update(kwds)
return f
return decorate
Skip
More information about the Python-Dev
mailing list