gpt4 book ai didi

python : recursion loop in rich comparison operator

转载 作者:太空狗 更新时间:2023-10-30 01:01:45 24 4
gpt4 key购买 nike

我不明白我的错误中的逻辑在哪里,所以我设法找到了一个最小的例子。我定义了一个类 t,并说当您使用 <= 运算符时会发生一些事情,并且 a>=b 必须计算 b<=a。效果不错

然后我从t派生了一个子类u。当我比较两个值时,如果它们都来自 t 或都来自 u 它按预期工作,但如果一个来自类 u 和另一个来自类 t 它失败了。 为什么 ??

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

编辑:在 python 2.x(来自 tobias_k)中没有问题,但我至少想使用 python 3.3

最佳答案

当你做 a <= bba 子类的一个实例的类,Python 将首先调用 b.__ge__('a') (如果此调用返回 NotImplemented,然后尝试其他方法)

这里是如何在没有无限递归的情况下实现它:

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

关于 python : recursion loop in rich comparison operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22742014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com