如何重载除法并与Python 2.x中的__future__除法兼容

时间:2014-11-13 04:12:19

标签: python operator-overloading division

如何在同一个Python 2.x脚本中同时使用from __future__ import division和重载除法?

在Python中,我通常可以通过引入__div__和/或__rdiv__方法来覆盖除法运算符,例如

class A:
    def __rdiv__(self, other):
        return 2.1

a = A()

print 3/a

如果我在一个新的Python 2.7.6解释器中运行上面的内容,它会显示2.1,即预期的结果。

另一方面,如果我以from __future__ import division开头,则代码会失败并显示:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'int' and 'instance'

1 个答案:

答案 0 :(得分:2)

除了__div__ / __rdiv__方法之外,在A时调用__rtruediv__ __truediv__和/或from __future__ import division方法已生效。

(另请注意,在Python 2中,您确实应该让所有类继承自object。)