[New-bugs-announce] [issue35654] Remove 'guarantee' that sorting only relies on __lt__ from sorting howto
report at bugs.python.org
Thu Jan 3 16:35:41 EST 2019
New submission from Martijn Pieters <mj at python.org>:
Currently, the sorting HOWTO at https://docs.python.org/3/howto/sorting.html#odd-and-ends contains the text:
> The sort routines are guaranteed to use __lt__() when making comparisons between two objects. So, it is easy to add a standard sort order to a class by defining an __lt__() method
Nowhere else in the Python documentation is this guarantee made, however. That sort currently uses __lt__ only is, in my opinion, an implementation detail.
The above advice also goes against the advice PEP 8 gives:
> When implementing ordering operations with rich comparisons, it is best to implement all six operations (__eq__, __ne__, __lt__, __le__, __gt__, __ge__) rather than relying on other code to only exercise a particular comparison.
> To minimize the effort involved, the functools.total_ordering() decorator provides a tool to generate missing comparison methods.
The 'guarantee' seems to have been copied verbatim from the Wiki version of the HOWTO in https://github.com/python/cpython/commit/0fe095e87f727f4a19b6cbfd718d51935a888740, where that part of the Wiki page was added by an anonymous user in revision 44 to the page: https://wiki.python.org/moin/HowTo/Sorting?action=diff&rev1=43&rev2=44
Can this be removed from the HOWTO?
assignee: docs at python
nosy: docs at python, mjpieters, rhettinger
title: Remove 'guarantee' that sorting only relies on __lt__ from sorting howto
versions: Python 3.6
Python tracker <report at bugs.python.org>
More information about the New-bugs-announce