猿问

python基本数据结构dict继承自object,但为什么又是MutableMapping的子类

dict是抽象类MutableMapping的一个子类

>>> from collections.abc import MutableMapping>>> isinstance(dict(),MutableMapping)True

但是在builtin.py中可以看到dict是继承自object对象。

所以我就产生了疑问,dict到底是如何实现继承MutableMapping的呢,是直接继承还是有一些中间环节。
MutableMapping是继承object的吗,这三者之间的关系到底是怎样的。

我了解到dict的实现应当是由解释器内部实现的。
我知道这大概涉及到python解释器的内部原理了,我对此很感兴趣。

MutableMapping也是由解释器内部实现的吗?
然后dict和MutableMapping在解释器内部实现了继承关系


跃然一笑
浏览 613回答 1
1回答

慕姐4208626

isinstance 除了会依据类的 mro 来判断,也会基于 鸭子协议 来判断对象是否满足某个类型的行为。比如 list 对象是直接继承自 object 。但它本身也能够跌倒,它属于可迭代对象。通过 isinstance([], typing.Iterable) 返回的是真。这部分和 __instancecheck__ 魔术方法有关,根据 PEP 3119 的描述中得知实例的检查是允许重载的。The primary mechanism proposed here is to allow overloading the built-in functions isinstance() and issubclass(). The overloading works as follows: The call isinstance(x, C) first checks whether C.__instancecheck__ exists, and if so, calls C.__instancecheck__(x) instead of its normal implementation. Similarly, the call issubclass(D, C) first checks whether C.__subclasscheck__ exists, and if so, calls C.__subclasscheck__(D) instead of its normal implementation.大致意思是调用 isinstance(x,C) 时先检查 C.__ instancecheck__ 是否存在,如果存在,则调用 C.__ instancecheck __(x)而不是其正常实现(从类的 mro 来判断)。MutableMapping 应该也是通过重载的方式实现了对"子类"的判断。相关文章:深度剖析isinstance的检查机制
随时随地看视频慕课网APP

相关分类

Python
我要回答