python : recursion loop in rich comparison operator

operators, python, python-3.x

Solution

When you do `a <= b` and `b` is an instance of a subclass of `a`'s class, Python will first call `b.__ge__('a')` (and then try other methods if this call returns `NotImplemented`)

Here is how to implement it without infinite recursion:

>>> class t:
...     def __le__(self, other):
...         return True
...     def __ge__(self, other):
...         return NotImplemented
... 
>>> class u(t):
...     pass
...

Problem

I did not understand where is the logic in my bug, so I managed to find a minimal example. I defined one class `t`, and said that something happens when you use the <= operator and that a>=b must compute b<=a. It works fine Then I derived a subclass `u` from `t`. When I compare two values, if they are both from `t` or both from `u` it works as expected, but if one is from class `u` and another from class `t` it fails. Why ?? ``` class t : def __le__(self,other) : return True def __ge__(self,other) : return(other<=self) class u(t) : pass a=t() b=u() #works a<=a a>=a b<=b b>=b #works a>=b b<=a #doesn't work RuntimeError: maximum recursion depth exceeded a<=b b>=a ``` EDIT : There is no problem in python 2.x (from tobias_k), but I want to use python 3.3 at least

Original source

Related problems