What methods need to be overridden/implemented when making user-defined classes sortable and/or hashable in python?
What are the gotchas to watch out for?
I type dir({}) into my interpreter to get a list of methods on built-in dicts. Of those, I assume I need to some implement some subset of
['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__']
Is there a difference in which methods must be implemented for Python3 as opposed to Python2?
I almost posted this as a comment to the other answers but it’s really an answer in and of itself.
To make your items sortable, they only need to implement
__lt__. That’s the only method used by the built in sort.The other comparisons or
functools.total_orderingare only needed if you actually want to use the comparison operators with your class.To make your items hashable, you implement
__hash__as others noted. You should also implement__eq__in a compatible way — items that are equivalent should hash the same.