[Python-3000] PEP 3124 - Overloading, Generic Functions, Interfaces, etc.

Phillip J. Eby pje at telecommunity.com
Tue May 15 00:02:42 CEST 2007

At 03:43 PM 5/14/2007 -0400, Jim Jewett wrote:
>On 5/14/07, Phillip J. Eby <pje at telecommunity.com> wrote:
>>I don't see what the benefit is of making people implement their own
>>versions of @before, @after, and @around, which then won't
>>interoperate properly with others' versions of the same thing.  Even
>>if we leave in place the MethodList base class (which Before and
>>After are subclasses of), one of its limitations is that it can only
>>combine methods of the same type.
>That sounds broken; could you use a numeric precedence with default
>levels, like the logging library does?

There are lots of things that *could* be done, but I personally 
dislike numeric levels because they're arbitrary and it's too easy to 
just tweak a number than think through what you actually intend.

However, nothing stops you from inventing a combination type or even 
a criterion type that uses a numeric precedence.  However, at this 
point, just to prevent further head-exploding I've been leaving that 
part of the extension API vague.

But, the basic idea is that just like Interfaces or ABCs or Roles can 
be used to annotate arguments, so too could you add other types of 
criteria objects, and the precedence of those criteria could be used 
to disambiguate method precedence.

In other words, you're not limited to using diffferent combinators in 
order to extend the precedence system.  That's just what we've been discussing.

One of the reasons to have standard versions of 
when/before/after/around, however, is so that most code will never 
need to define any combinators.  The standard ones should handle the 
vast majority of use cases.

Admittedly, before/after/around are IMO 20% cases, not 80% 
cases.  Probably basic overloading is 75-80% of use cases.  But 
before/after/around covers another 20-25% or so, leaving maybe 5% or 
less for the custom combinator cases.

More information about the Python-3000 mailing list