在Python2.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

为什么只有u*z有效,而u/z给出:
TypeError: unsupported operand type(s) for /: 'instance' and 'instance'

最佳答案

在Python 2中,除非添加:

from __future__ import division

未使用__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'

使用from __future__导入,旧的python 2/操作符将被python 3行为替换,其中使用该操作符的所有数值除法都将导致浮点结果。在Python2中,如果使用两个int值,则会得到floor division,这令人困惑。

关于python - 在python中覆盖truediv,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20589436/

10-10 05:51