python:富比较运算符中的递归循环

python:富比较运算符中的递归循环,python,python-3.x,operators,Python,Python 3.x,Operators,我不明白bug中的逻辑在哪里,所以我设法找到了一个最小的例子。我定义了一个类t,并说当你使用=b必须计算b当你做a哪个类是a和b时会发生一些事情?@akaRem抱歉,我添加了a和b的定义。仅供参考,在Python 2.x中它按预期工作(始终返回true)。@tobias_k谢谢,我编辑了我的问题以包含您的评论。问题似乎在于比较器替换,因为调用返回(other=other相反,导致无限递归……然而,我不知道它为什么会这样做,为什么只有在最后两种情况下……它是一个文档化的功能?我确信我在文档中看到过

我不明白bug中的逻辑在哪里,所以我设法找到了一个最小的例子。我定义了一个类
t
,并说当你使用=b必须计算b当你做
a哪个类是a和b时会发生一些事情?@akaRem抱歉,我添加了
a
b
的定义。仅供参考,在Python 2.x中它按预期工作(始终返回true)。@tobias_k谢谢,我编辑了我的问题以包含您的评论。问题似乎在于比较器替换,因为调用
返回(other=other
相反,导致无限递归……然而,我不知道它为什么会这样做,为什么只有在最后两种情况下……它是一个文档化的功能?我确信我在文档中看到过,但我找不到类似问题和答案的来源。文档似乎是(对于子类重写和使用NotImplemented作为@ValentinLorentz的建议),以及对于
“\uuuu le\uuuuuu”
”\uuuu ge\uuuuuz”
是彼此的反映。似乎必须从这两个部分自己拼凑规范。@RoryWorker感谢链接,特别是SEquestion@ValentinLorentz这被记录到注释中指定了反射方法和子类方法之间的顺序的地方:。。。
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
>>> class t:
...     def __le__(self, other):
...         return True
...     def __ge__(self, other):
...         return NotImplemented
... 
>>> class u(t):
...     pass
...