[Python-Dev] ValuesView abc: why doesn't it (officially) inherit from Iterable? (original) (raw)
Brett Cannon brett at python.org
Tue Jun 14 16:44:19 EDT 2016
- Previous message (by thread): [Python-Dev] ValuesView abc: why doesn't it (officially) inherit from Iterable?
- Next message (by thread): [Python-Dev] ValuesView abc: why doesn't it (officially) inherit from Iterable?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, 14 Jun 2016 at 13:30 Alan Franzoni <mailing at 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? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20160614/26e1b9a8/attachment.html>
- Previous message (by thread): [Python-Dev] ValuesView abc: why doesn't it (officially) inherit from Iterable?
- Next message (by thread): [Python-Dev] ValuesView abc: why doesn't it (officially) inherit from Iterable?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]