我只是在collections.abc
s 上为我的一个项目查看一些文档,我需要在其中做一些与类型相关的工作。这些是ValuesView
Python 2 和 3 中关于类型的官方文档:
这就是源代码(Python 2,但同样发生在 Python 3 中)
我对ValuesView
接口感到非常困惑,因为从逻辑的角度来看,它应该继承自Iterable
, 恕我直言(它甚至有__iter__
Mixin 方法);相反,文档说它只是继承自MappingView
,继承自Sized
,不继承自Iterable
。
所以我启动了我的 2.7 解释器:
>>> from collections import Iterable
>>> d = {1:2, 3:4}
>>> isinstance(d.viewvalues(), Iterable)
True
>>>
Iterable
毕竟,它看起来是因为Iterable
自己的子类挂钩。
但我不明白为什么ValuesView
不明确Iterable
。其他ABC
的,比如Sequence
or Set
,是明确的Iterable
。这背后是否有一些神秘的原因,或者它只是一个很少使用的功能的文档+实现缺陷?