Suppose instances of my ClassA will end up in a data structure and we know sorted() will be called on it. It's someone else's code that'll call sorted() so I can't specify a sorting function but I can implement whatever methods are appropriate on ClassA.
It appears to me that
def __lt__(self, other):
is sufficient and that I don't need implement the other five or so methods (qt,eq,le,ge,ne).
Is this sufficient?
Definition and Usage The sorted() function returns a sorted list of the specified iterable object. You can specify ascending or descending order. Strings are sorted alphabetically, and numbers are sorted numerically. Note: You cannot sort a list that contains BOTH string values AND numeric values.
sort() and sorted() in python are “stable sorts”, meaning that it'll preserve the existing order when faced with a tie.
Python list sort() function can be used to sort a List in ascending, descending, or user-defined order.
PEP 8 recommends against this practice. I also recommend against it because it is a fragile programming style (not robust against minor code modifications):
Instead, consider using the functools.total_ordering class decorator to do the work:
@total_ordering class Student: def __eq__(self, other): return ((self.lastname.lower(), self.firstname.lower()) == (other.lastname.lower(), other.firstname.lower())) def __lt__(self, other): return ((self.lastname.lower(), self.firstname.lower()) < (other.lastname.lower(), other.firstname.lower()))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With