[Python-3000] PEP 3124 - Overloading, Generic Functions, Interfaces, etc. (original) (raw)

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