在python中覆盖truediv

use*_*314 3 python methods overriding division

在Python 2.7.5中,我尝试了以下方法:

class compl1:
    def __mul__(A,B):
        adb=56
        return adb

    def __truediv__(A,B):
        adb=56
        return adb

u=compl1()
z=compl1()
print  u*z
print u/z
Run Code Online (Sandbox Code Playgroud)

为什么只有u*z工作,而u/z给出:

TypeError: unsupported operand type(s) for /: 'instance' and 'instance'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

在Python 2中,除非你添加:

from __future__ import division
Run Code Online (Sandbox Code Playgroud)

__truediv__钩不被使用.通常__div__用来代替:

>>> class compl1:
...     def __div__(self, B):
...         return 'division'
...     def __truediv__(self, B):
...         return 'true division'
... 
>>> compl1() / compl1()
'division'
>>> from __future__ import division
>>> compl1() / compl1()
'true division'
Run Code Online (Sandbox Code Playgroud)

通过from __future__导入,旧的Python 2 /运算符将替换为Python 3行为,其中所有使用该运算符的数字除法都会导致浮点结果.在Python 2中,如果你使用了两个int值,那么你就得到了分区,这让人感到困惑.