I was just checking out some docs on 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
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 ABC
s, 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