[Python-3000] PEP 3124 - Overloading, Generic Functions, Interfaces, etc.
Phillip J. Eby
pje at telecommunity.com
Wed May 2 06:04:35 CEST 2007
At 02:50 PM 5/2/2007 +1200, Greg Ewing wrote:
>Phillip J. Eby wrote:
> > The PEP lists *five* built-in decorators, all of which support this
> behavior::
> >
> > @overload, @when, @before, @after, @around
>
>This seems massively over-designed. All you need is the
>ability to call the next method, and you can get all of
>these behaviours. If you call it first, then you get
>after behaviour; if you call it last, you get before
>behaviour; etc.
Yep, that was my theory too, until I actually used generic functions. As
it happens, it's:
1) a lot more pleasant not to write the extra boilerplate all the time, and
2) having @before or @after tells you right away the intent of the method,
without having to carefully inspect the body to see when and whether it is
calling the next method, and whether it is modifying the arguments or
return values in some way.
In other words, the restricted behavior of @before and @after methods makes
them easier to write *and* easier to read.
By the way, if you look at the PEP, you'll find motivating examples for
each of the decorators, as well as an explanation and examples of when and
how you might want to create even *more* such decorators.
IIRC, CLOS has about *8 more* kinds of method combinators that come
standard, including ones that we'd probably spell something like @sum,
@product, @min, @max, @list, @any, and @all, if it weren't for most of
those names already being builtins that mean something else. :) The PEP
doesn't propose implementing all of those, but it does show how easily you
can create things like that if you want to.
More information about the Python-3000
mailing list