issubclass(C, Mapping) not behaving as expected

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed May 30 22:06:11 EDT 2012


On Wed, 30 May 2012 00:55:00 -0700, anntzer.lee wrote:

> from collections import *
> class C(object):
>     def __iter__(self): pass
>     def __contains__(self, i): pass
>     def __len__(self): pass
>     def __getitem__(self, i): pass
>
> issubclass(C, Mapping) => False
> [issubclass(C, cls) for cls in Mapping.__mro__] => [False, True, True,
> True, True] i.e. C does implement Sized, Iterable and Container.
> 
> I would have expected that just as issubclass(C, Sized) checks for the
> presence of a "__len__" method, issubclass(C, Mapping) would check for
> the presence of the three methods required by each immediate superclass?

What makes you think it doesn't? Perhaps it does, but there are other 
requirements for Mapping that are not being satisfied.

I must admit that the documentation for collections and in particular for 
Mapping and MutableMapping are a bit unclear to me. But have you tried 
registering your class as a Mapping explicitly?


-- 
Steven



More information about the Python-list mailing list