dict是抽象类MutableMapping的一个子类
>>> from collections.abc import MutableMapping
>>> isinstance(dict(),MutableMapping)
True
但是在builtin.py中可以看到dict是继承自object对象。
所以我就产生了疑问,dict到底是如何实现继承MutableMapping的呢,是直接继承还是有一些中间环节。
MutableMapping是继承object的吗,这三者之间的关系到底是怎样的。
我了解到dict的实现应当是由解释器内部实现的。
我知道这大概涉及到python解释器的内部原理了,我对此很感兴趣。
MutableMapping也是由解释器内部实现的吗?
然后dict和MutableMapping在解释器内部实现了继承关系
isinstance
除了会依据类的mro
来判断,也会基于鸭子协议
来判断对象是否满足某个类型的行为。比如list
对象是直接继承自 object 。但它本身也能够跌倒,它属于可迭代对象。通过isinstance([], typing.Iterable)
返回的是真。这部分和__instancecheck__
魔术方法有关,根据 PEP 3119 的描述中得知实例的检查是允许重载的。大致意思是调用
isinstance(x,C)
时先检查C.__ instancecheck__
是否存在,如果存在,则调用C.__ instancecheck __(x)
而不是其正常实现(从类的mro
来判断)。MutableMapping
应该也是通过重载的方式实现了对"子类"的判断。相关文章:深度剖析isinstance的检查机制