[Python-3000] Abilities / Interfaces
Walter Dörwald
walter at livinglogic.de
Wed Nov 22 09:45:46 CET 2006
Guido van Rossum wrote:
> On 11/21/06, Phillip J. Eby <pje at telecommunity.com> wrote:
> [...]
>> That's because some generic functions use if-isinstance checks (bad), while
>> others use custom __special__ methods (not bad, but not great), registries
>> (good), adaptation (okay), or generic function libraries.
>
> __special__ methods are great for many purposes because they are well
> understood. Registries are mostly good when there's a need for an
> independent third party to add an ability; IMO this isn't as common in
> most places as you seem to think.
Another effect of __special__ methods is that they divide the class
namespace into two parts: The __special__ names are those that have to
be implemented to support core Python interfaces, and the methods
without underscores are those that implement the "main aspect" of the
class. However there might be other aspects worth supporting (fancy
repr, pickling, GUI output, etc.). The methods needed for that support
either have to share the special namespace or the main namespace.
In Java there are interfaces, but there's only one namespace in which
support for an interface can be implemented, so method names have to be
fairly long to minimize collisions.
With generic functions that problem goes away. It's no longer the name
of the method that links the implementation to the protocol, but an
explicit registration of the implementing function.
> [...]
Servus,
Walter
More information about the Python-3000
mailing list