[Python-3000] pep 3124 plans

Phillip J. Eby pje at telecommunity.com
Fri Jul 27 18:20:30 CEST 2007


At 08:25 AM 7/27/2007 -0700, Guido van Rossum wrote:
>Basic GFs, great. Before/after/around, good. Other method
>combinations, fine. But GFs in classes and subclassing? Not until we
>have a much better design.

Sounds reasonable to me. The only time I actually use them in 
classes myself is to override existing generic functions that live 
outside the class, like ones from an Interface or a standalone generic.
The main reason I included GFs-in-classes examples in the PEP is 
because of the "dynamic overloading" meme. In C++, Java, etc., you 
can use overloading in methods, so I wanted to show how you could do 
that, if you wanted to.
I suspect that the simplest way to fix this in Py3K is with an 
"overloading" metaclass, as it would not even require any 
decorators. That is, you could provide a custom dictionary that 
records every definition of a function with the same name. The 
actual metaclass creation process would check for a method of the 
same name in a base class, and if it's generic (or the current class 
added more than one method), put a generic method in.
With a little bit of work, you could probably determine whether you 
could get away with dropping the genericness in a subclass; 
specifically, if all the subclass-defined methods are "more specific" 
than all base class methods, then there's no need for them to be in 
the same generic function, unless they make next_method calls. Thus, 
you'll end up with normal methods except where absolutely necessary.
Such a metaclass would make method overloads look pretty much the 
same as in OO languages with static overloading. The only remaining 
hole at that point would be reconciling super() and next_method. If 
you're using this metaclass, super() is only meaningful if you're not 
in the same generic function as is used in your base, while 
next_method() is only meaningful if you *are*.
I don't know of any quick way to fix that, but I'll give it some thought. 


More information about the Python-3000 mailing list

AltStyle によって変換されたページ (->オリジナル) /