为什么python3重定义了__div__之后还是报错?
class Rational(object): def __init__(self, p, q): self.p = p self.q = q def gcd(self, a, b): if a < b: a, b = b, a while b != 0: temp = a % b a = b b = temp return a def __add__(self, r): upper = self.p * r.q + self.q * r.p lower = self.q * r.q d = self.gcd(upper, lower) upper /= d lower /= d return Rational(int(upper), int(lower)) def __sub__(self, r): upper = self.p * r.q - self.q * r.p lower = self.q * r.q d = self.gcd(upper, lower) upper /= d lower /= d return Rational(int(upper), int(lower)) def __mul__(self, r): upper = self.p * r.p lower = self.q * r.q d = self.gcd(upper, lower) upper /= d lower /= d return Rational(int(upper), int(lower)) def __div__(self, r): upper = self.p * r.q lower = self.q * r.p d = self.gcd(upper, lower) upper /= d lower /= d return Rational(int(upper), int(lower)) def __str__(self): return '%s/%s' % (self.p, self.q) __repr__ = __str__ r1 = Rational(1, 2) r2 = Rational(1, 4) print (r1 + r2) print (r1 - r2) print (r1 * r2) print (r1 / r2)
报出的错误是:
print (r1 / r2) TypeError: unsupported operand type(s) for /: 'Rational' and 'Rational'
为毛?我都已经定义好了啊,python3是不是瞎?在imooc上面通过了,也得出了正确结果,说明在py2上是没有问题的。