3 ms·
It's virtually the same in Python if you wrote it explicitly: def <=>(other) [major, minor, patch] <=> [other.major, other.minor, other.patch]
by js2 11mo ago
It's virtually the same in Python if you wrote it explicitly:
def <=>(other)
[major, minor, patch] <=> [other.major, other.minor, other.patch]
end
vs:
def __lt__(self, other):
return (self.major, self.minor, self.patch) < (other.major, other.minor, other.patch)
Then use the `total_ordering` decorator to provide the remaining rich comparison methods.
That said, it's a little annoying Python didn't keep __cmp__ around since there's no direct replacement that's just as succinct and what I did above is a slight fib: you still may need to add __eq__() as well.
- zahlman 11mo ago> Then use the `total_ordering` decorator to provide the remaining rich comparison methods. While we're here, worth highlighting `cmp_to_key` as well for `sorted` etc. calls. > it's a little annoying Python didn't keep __cmp__ around since there's no direct replacement that's just as succinct The rationale offered at the time (https://docs.python.org/3/whatsnew/3.0.html https://docs.python.org/3/whatsnew/3.0.html) was admittedly weak, but at least this way there isn't confusion over what happens if you try to use both ways (because one of them just isn't a way any more).
- disgruntledphd2 11mo agoI know, but the ability to use symbols to define the comparator is super, super cool, as opposed to the horrendously ugly lt dunder method.