Python collections ValuesView abc:为什么不继承自Iterable?
Python collections ValuesView abc: why doesn't it inherit from Iterable?
我只是在 Python 2 和 3 中检查了一些关于 collections.abc
s for a project of mine, where I need to do some type-related work. Those are the official docs about the ValuesView
类型的文档:
和 this 是来源(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
自己的subclasshook。
但我不明白为什么 ValuesView
没有明确地 Iterable
。其他 ABC
,如 Sequence
或 Set
,明确为 Iterable
。这背后是否有一些神秘的原因,或者它只是一个很少使用的功能的文档+实现缺陷?
在 Python 3.7.2 中,它继承自 MappingView
和 Collection
,后者又继承自(除其他外)Iterable
。有人听你说话。
我只是在 Python 2 和 3 中检查了一些关于 collections.abc
s for a project of mine, where I need to do some type-related work. Those are the official docs about the ValuesView
类型的文档:
和 this 是来源(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
自己的subclasshook。
但我不明白为什么 ValuesView
没有明确地 Iterable
。其他 ABC
,如 Sequence
或 Set
,明确为 Iterable
。这背后是否有一些神秘的原因,或者它只是一个很少使用的功能的文档+实现缺陷?
在 Python 3.7.2 中,它继承自 MappingView
和 Collection
,后者又继承自(除其他外)Iterable
。有人听你说话。