[Python-3000] pep 3124 plans

Greg Ewing greg.ewing at canterbury.ac.nz
Wed Jul 25 03:43:04 CEST 2007


Phillip J. Eby wrote:
> ...and may be subclassed in an unlimited number of places.
> 
> A generic function is defined in just one place, with a limited number 
> of "generic" methods typically adjoining it, and may be extended in an 
> unlimited number of places.
> 
> Where's the difference?

With GFs, even if you assume a particular runtime type,
it can *still* be extended in an unlimited number of places.

>> It also provides a convenient mental chunk under which to
>> group all the operations that it implements.
> 
> The function itself is the grouping, in the same way that Python's 
> operator.* functions are, or its built-in generics like len() and 
> iter().

But they're just syntactic sugar for calling methods of the
objects involved, so those objects' classes have full control
of what happens. If len() were a GF in your sense, the code
implementing it for a given type could appear anywhere.

>> No, you're going to find every function whose name is 'foo',
>> whether it's a method of the particular GF you have in mind
>> or not.
>
> And this doesn't apply to normal methods?

Yes, it does to some extent, and that can be a nuisance. But
in the first instance I'm not going to grep the whole program,
just the file where the class is defined. If I don't find it
there, I'll move on to the file defining its base class, etc.
The first definition I find will be the relevant one.

In other words, I have a search *path* through a structure
that's reflected in the layout of the source files. GFs
destroy that structure.

(Multiple inheritance can mess this up a bit, but that just
means multiple inheritance has problems, not that GFs are
good.)

 > For one thing, you can isolate your search to modules that
> import the function being overridden

But I'll still get an unordered set of results that I'll
have to sort through to find the most relevant method.

> The thing that you seem to keep missing in your analysis is that Python 
> already *has* generic functions in the language specification,

But only in a very restricted way -- so restricted that
I've never even thought of them as GFs, but as just another
way to write a method call.

--
Greg


More information about the Python-3000 mailing list