我只是在collections.abcs 上为我的一个项目查看一些文档,我需要在其中做一些与类型相关的工作。这些是ValuesViewPython 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的,比如Sequenceor Set,是明确的Iterable。这背后是否有一些神秘的原因,或者它只是一个很少使用的功能的文档+实现缺陷?