=== This proposition is purely aesthetic === At this time, the __repr__ of the mapping views is showing the whole mapping:
>>> from collections.abc import ValuesView, KeysView, ItemsView >>> d = {3: 'three', 4: 'four'} >>> KeysView(d) KeysView({3: 'three', 4: 'four'}) >>> ValuesView(d) ValuesView({3: 'three', 4: 'four'}) >>> ItemsView(d) ItemsView({3: 'three', 4: 'four'}) Witch is not consistent with dict_keys, dict_values, dict_items: >>> d.keys() dict_keys([3, 4]) >>> d.values() dict_values(['three', 'four']) >>> d.items() dict_items([(3, 'three'), (4, 'four')]) We could easily change that, since all the views are iterables on what they are designed for, in MappingView: def __repr__(self): viewname = self.__class__.__name__ elements = ', '.join(map(repr, self)) return f'{viewname}([elements]) And now: >>> KeysView(d) KeysView([3, 4]) >>> ValuesView(d) ValuesView(['three', 'four']) >>> ItemsView(d) ItemsView([(3, 'three'), (4, 'four')]) It's not breaking any test (it seems that there isn't any for this), but it have a real drawback: it's breaking the convention about instantiation by copy/pasting: >>> ValuesView(['three', 'four']) Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/IPython/core/formatters.py", line 684, in __call__ return repr(obj) File "/usr/lib/python3.6/_collections_abc.py", line 706, in __repr__ elements = ', '.join(map(repr, self)) File "/usr/lib/python3.6/_collections_abc.py", line 764, in __iter__ yield self._mapping[key] TypeError: list indices must be integers or slices, not str It's because __init__ in MappingView treat the passed argument -- wich is stored in self._mapping -- as the whole mapping, not just keys, values or items... And all the other methods (__contains__ and __iter__) in the subclasses are using this _mapping attribute to work. So what is to prioritize? _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/