Boilerplate in rich comparison methods
Paul Rubin
http
Sat Jan 13 02:28:06 EST 2007
Steven D'Aprano <steve at REMOVE.THIS.cybersource.com.au> writes:
> class Parrot:
> def __eq__(self, other):
> return self.plumage() == other.plumage()
> def __ne__(self, other):
> return self.plumage() != other.plumage()
> def __lt__(self, other):
> return self.plumage() < other.plumage()
> def __gt__(self, other):
> return self.plumage() > other.plumage()
> def __le__(self, other):
> return self.plumage() <= other.plumage()
> def __ge__(self, other):
> return self.plumage() >= other.plumage()
If it's that uniform I think you can just use __cmp__:
class Parrot:
def __cmp__(self, other):
return cmp(self.plumage(), other.plumage())
Did I miss something? The idea of rich comparison is that the
different relations aren't so similar to each other, e.g. some kind of
partial ordering.
> If the comparison requires a lot of work, I'll do something like this:
>
> class Aardvark:
> def __le__(self, other):
> return lots_of_work(self, other)
> def __gt__(self, other):
> return not self <= other
> # etc.
>
> But I can't help feeling that there is a better way. What do others do?
Same as above.
More information about the Python-list
mailing list