比较两个对象时超出了最大递归深度

时间:2014-02-04 02:36:48

标签: python class recursion operator-keyword

我目前是Python的新手,我不知道为什么我会收到错误:

a<r raised exception RuntimeError: maximum recursion depth exceeded while calling a Python object

当我这样做时:

a = Rational(1,3)
r = Rational(0,5)
print(a<r)

我目前的代码是:

class Rational:
    def _gcd(x,y):
        while y != 0:
            x, y = y, x % y
        return x

    def __init__(self, num = 0, denom = 1):
         gcd = Rational._gcd(num, denom)
         self.num = int(num / gcd)
         self.denom = int(denom / gcd)

    def __lt__(self, right):
        return Rational(self.num, self.denom) < Rational(right.num, right.denom)

当我做同样的事情时,所有其他关系运算符也会发生。 有人可以在这件事上启发我吗?我该如何处理或解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

这一行:

Rational(self.num, self.denom) < Rational(right.num, right.denom)

...再次调用__lt__方法,导致无限递归。尝试不同的方法,假设我们使用的是Python 3.x(或者在Python 2.x中,from __future__ import division事先已经执行过),这应该可行:

self.num/self.denom < right.num/right.denom