I was just checking out some docs on collections.abcs for a project of mine, where I need to do some type-related work. Those are the official docs about the ValuesView type, in both Python 2 and 3:
and this is the source (Python 2, but same happens in Python 3)
I was very puzzled about the ValuesView interface, because from a
logical standpoint it should inherit from Iterable, IMHO (it's even
got the __iter__ Mixin method); on the contrary the docs say that it just
inherits from MappingView, which inherits from Sized, which doesn't
inherit from Iterable.
So I fired up my 2.7 interpreter:
>>> from collections import Iterable
>>> d = {1:2, 3:4}
>>> isinstance(d.viewvalues(), Iterable)
True
>>>
It looks Iterable, after all, because of Iterable's own subclasshook.
But I don't understand why ValuesView isn't explicitly Iterable. Other ABCs, like Sequence or Set, are explicitly Iterable. Is there some arcane reason behind that, or it's just a documentation+implementation shortcoming for a little-used feature?
In Python 3.7.2, it inherits from both MappingView and Collection which in turn inherits from (among others) Iterable. Someone listened to you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With