python - Why is issubclass(dict, collections.Mapping) true in CPython? -


in cpython following

import collections issubclass(dict, collections.mapping) 

returns true. confuses me bit, since dict builtin class defined in ctypes , collections module explicitly relies on existence of dict accomplish of functionality. other straightforward inheritance checks must going on , can't figure out why works. below provide of reasoning leads confusion.


if @ inheritance structure of collections.mapping see inherits collection. collection's signature shows inherits sized, iterable, container of inherit metaclass abcmeta.

but dict builtin, thought meant being defined directly ctype thought meant wouldn't inheriting anything.

so, why issubclass(dict, collections.mapping)true?


for more context why came see this nbformat issue, in in attempting recreate signature & functionality of dict's update need know how issubclass(foo, mapping) behave.

that's because metaclasses can customize issubclass , isinstance return. in case of mutablemapping done via abc.abcmeta, allows register "virtual subclasses".

for example:

from collections import mutablemapping  class a(object): pass mutablemapping.register(a) issubclass(a, mutablemapping)  # true 

it works subclasses of registered subclasses:

class b(object): pass class c(b): pass mutablemapping.register(b) issubclass(c, mutablemapping)  # true 

the same happens dict. though it's not real subclass of mutablemapping it's still virtual subclass. second example shows means "real" subclasses of dict "virtual" subclasses of mutablemapping.

note simpler abcs implement subclass checks based on presence of methods. example collections.sized checks if class has __len__:

from collections import sized  class d(object):     def __len__(self):         return 1  issubclass(d, sized)   # true 

so without explicit register d recognized valid subclass of sized.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -