[Python-Dev] PEP 318 - posting draft
Phillip J. Eby
pje at telecommunity.com
Tue Mar 23 14:38:29 EST 2004
At 11:12 AM 3/23/04 -0800, Guido van Rossum wrote:
> > def func [dec1, dec2, ...] (arg1, arg2, ...):
> > pass
> >
> > Quixote's Page Template Language uses this form, but only supports a
> > single decorator chosen from a restricted set. For short lists it
> > works okay, but for long list it separates the argument list from the
> > function name.
>
>OTOH, for long argument lists, the "preferred" form has the reverse
>problem: the decorators are separated from the function name by the
>long argument list.
>
>The question then becomes, what is more likely: long argument lists or
>long lists of decorators? I *know* that (at least in certain code
>bases :) long argument lists are common. Will long lists of
>decorators ever become popular?
That depends on how many chainable decorators people come up with. Most of
the built-in decorators (classmethod, staticmethod, property) are not
chainable in any reasonable sense, as their output is a descriptor.
In PEAK I have a couple of other function->descriptor decorators, one
descriptor->descriptor decorator, and a handful of function->function
decorators. Looking at the ones I have now, the longest chain I could make
would probably be something like:
def something(self) [
events.taskFactory, storage.autocommit, binding.Make,
binding.classAttr
]:
pass
But that's rather silly, because I've basically said I want an asynchronous
pseudothread to be started inside a transaction that will immediately
commmit (before the pseudothread has even done anything), and oh yeah, it
should happen only once per subclass of this class, when you first access
the 'something' attribute on the class (as distinct from its
instances). Whew! Anyway, I think it shows that a long decorator chain is
no worse on the eyes than a long argument list.
I think that initially, the most common decorator chains will be of length
1, with occasional "gusts" of 2 to 3. The most likely cause of longer
chains will be people using contract decorators, since those are probably
the most-chainable of decorator types. As time goes on and people come up
with more ways to use them, the overall average length will probably creep
upward, but I think the median will tend to stay hovering somewhere between
1 and 3.
More information about the Python-Dev
mailing list