[Python-Dev] Rich comparison confusion
17 Jan 2001 16:13:32 +0000
Skip Montanaro <email@example.com> writes:
> I'm a bit confused about Guido's rich comparison stuff. In the description
> he states that __le__ and __ge__ are inverses as are __lt__ and __gt__.
> >From a boolean standpoint this just can't be so. Guido mentions partial
> orderings, but I'm still confused. Consider this example: Objects of type A
> implement rich comparisons. Objects of type B don't. If my code looks like
> a = A()
> b = B()
> if b < a:
> My interpretation of the rich comparison stuff is that either
> 1. Since b doesn't implement rich comparisons, the interpreter falls
> back to old fashioned comparisons which may or may not allow the
> comparison of B objects and A objects.
> 2. The sense of the inequality is switched (a > b) and the rich
> comparison code in A's implementation is called.
> That's my reading of it. It has to be wrong. The inverse comparison should
> be a >= b, not a > b, but the described pairing of comparison functions
> would imply otherwise.
> I'm sure I'm missing something obvious or revealing some fundamental failure
> of my grade school education. Please explain...
For a total order:
a < b if and only if b > a.
This is what the rich comparison code does.
a < b if and only if a >= b.
This is that the rich comparison code doesn't do.
Does this make sense?
Presumably pronging in the wrong place zogs it.
-- Aldabra Stoddart, ucam.chat