New submission from Joshua Bronson:

Since code can be clearer than prose, I just sketched this idea out in the 
attached patch. Please take a look at it as a minimum demonstration of the 
concept.

Rationale:

The Python standard library provides collections.OrderedDict, along with 
several ABCs which OrderedDict extends, such as collections.abc.Mapping and (as 
of 3.6) collections.abc.Reversible, to enable better composability and 
interoperability.

Currently there is no collections.abc.OrderedMapping ABC, but I wonder if there 
should be. OrderedMapping could provide a concrete, generic implementation of 
__eq__, that performed an order-sensitive comparison when passed another 
OrderedMapping, while performing an order-insensitive comparison when passed an 
unordered Mapping. Then OrderedDict could derive from OrderedMapping, 
inheriting its generic __eq__ implementation, rather than implementing its own 
__eq__ method. Currently, OrderedDict's own __eq__ implementation does 
``isinstance(other, OrderedDict)`` to decide whether to perform an 
order-sensitive comparison, which thwarts interoperability. OrderedMapping 
could also derive from Reversible, signaling that classes that extend it 
implement __reversed__.

The interoperability gain here is not just theoretical. Several packages are 
published on PyPI which would be able to interoperate better if they could all 
extend a common OrderedMapping interface. Grant Jenks' 
sortedcontainers.SortedDict[1] and my own bidict.OrderedBidict[2] are two 
particularly popular examples.

Thanks for your consideration, and look forward to your feedback.

[1] http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html
[2] https://bidict.readthedocs.io/en/dev/other-bidict-types.html#orderedbidict

----------
components: Library (Lib)
files: jab-orderedmapping-1.patch
keywords: patch
messages: 282742
nosy: gvanrossum, jab, rhettinger
priority: normal
severity: normal
status: open
title: collections.abc.OrderedMapping
type: enhancement
Added file: http://bugs.python.org/file45804/jab-orderedmapping-1.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28912>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to