[Python-3000] Composable abstract base class?

Guido van Rossum guido at python.org
Sun May 27 14:57:15 CEST 2007


On 5/27/07, Nick Coghlan <ncoghlan at gmail.com> wrote:
> Guido van Rossum wrote:
> > Ryan is repeating the classic flatten example: strings are iterables
> > but shouldn't be iterated over in this example. This is more the
> > domain of Generic Functions, PEP 3124. Anyway, the beauty of PEP 3119
> > is that even if PEP 3124 were somehow rejected, you could add
> > Composable yourself, and there is no requirement to add it (or any
> > other category you might want to define) to the "standard" set of
> > ABCs.
>
> I think this is an interesting example to flesh out though - how would I
> express that most instances of Iterable should be iterated over when
> being Flattened, but that certain instances of Iterable (i.e. strings)
> should be ignored?
>
> For example, it would be nice to be able to write:
>
>    from abc import Iterable
>
>    class Flattenable(Iterable):
>        pass
>
>    Flattenable.deregister(basestring)
>
>
> Reading the PEP as it stands, I believe carving out exceptions like this
> would require either subclassing ABCMeta to change the behaviour, or
> else relying on PEP 3124 or some other generic function mechanism.

You can't do it with the existing ABC class, but you could do it by
overriding __subclasscheck__ in a different way. But it's definitely
much easier to do with GFs.

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-3000 mailing list