ValuesView doesn't inherit from Set because the values in a dictionary can contain duplicates. That makes sense. It's just the missing Iterable, which is a weaker contract, that doesn't.
I'm filing the bug tomorrow. On Tue, Jun 14, 2016 at 10:44 PM, Brett Cannon <br...@python.org> wrote: > On Tue, 14 Jun 2016 at 13:30 Alan Franzoni <mail...@franzoni.eu> wrote: >> >> Hello, >> I hope not to bother anyone with a somewhat trivial question, I was >> unable to get an answer from other channels. >> >> I was just checking out some docs on 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: >> >> https://docs.python.org/2/library/collections.html#collections.ValuesView >> https://docs.python.org/3/library/collections.abc.html >> >> and this is the source (Python 2, but same happens in Python 3) >> >> >> https://hg.python.org/releases/2.7.11/file/9213c70c67d2/Lib/_abcoll.py#l479 >> >> 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, are explicitly inheriting Iterable. Is there some >> arcane reason behind that, or it's just a documentation+implementation >> shortcoming (with no real-world impact) for a little-used feature? > > > To add some extra info, both KeysView and ItemsView inherit from Set which > does inherit from Iterable. I personally don't know why ValuesView doesn't > inherit from Set (although Iterable does override __subclasshook__() so > there isn't a direct functional loss which if this turns out to be a bug why > no one has notified until now). > > Alan, would you mind filing an issue at bugs.python.org about this? -- My development blog: ollivander.franzoni.eu . @franzeur on Twitter contact me at public@[mysurname].eu _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com