Python3-如何判断重载时是否应使用uu idiv uu或u div uu行为?

Python3-如何判断重载时是否应使用uu idiv uu或u div uu行为?,python,python-3.x,operator-overloading,Python,Python 3.x,Operator Overloading,我正在编写一些处理/解析二进制数据的代码。整数提升是我处理各种整数类型时的一项要求。作为创建自定义整数类型的结果,并且因为我想支持python2和python3(不可协商),我需要重载\uuuu div\uuuu、\uu idiv\uuu和\uu truediv\uuu操作符 然而,在python3.7中,我不知道为什么要调用truediv!例如: 类NewInt(对象): 定义初始值(自身,值): 自我价值=价值 定义分区(自身、其他): 打印(“DIV”) 返回self.value/othe

我正在编写一些处理/解析二进制数据的代码。整数提升是我处理各种整数类型时的一项要求。作为创建自定义整数类型的结果,并且因为我想支持python2和python3(不可协商),我需要重载
\uuuu div\uuuu
\uu idiv\uuu
\uu truediv\uuu
操作符

然而,在python3.7中,我不知道为什么要调用truediv!例如:

类NewInt(对象):
定义初始值(自身,值):
自我价值=价值
定义分区(自身、其他):
打印(“DIV”)
返回self.value/other
定义(自身、其他):
打印(“IDIV”)
self.value/=其他
def _uTrueDiv__;(自身、其他):
打印(“TRUEDIV”)
返回self.value/other
test=NewInt(10)
测试/10
测试/=10
如果在python2.7中运行,我会得到:

DIV
IDIV
TRUEDIV
TRUEDIV
如果在python3.7中运行,我会得到:

DIV
IDIV
TRUEDIV
TRUEDIV

如果只调用
\uuu truediv\uuu
,我怎么知道什么时候发生就地除法呢?

您没有实现
\uu itruediv\uuuu
,它是Python 3的等价物,相当于Python 2的
\uu idiv\uu

class NewInt(object):
    def __init__(self, value):
        self.value = value

    def __truediv__(self, other):
        print("TRUEDIV")
        return self.value / other

    def __itruediv__(self, other):
        print("ITRUEDIV")
        self.value /= other

test = NewInt(10)
test / 10
test /= 10
输出

TRUEDIV
ITRUEDIV

您没有实现
\uuu itruediv\uu
,这是Python 3与Python 2的
\uu idiv\uu
的等价物

class NewInt(object):
    def __init__(self, value):
        self.value = value

    def __truediv__(self, other):
        print("TRUEDIV")
        return self.value / other

    def __itruediv__(self, other):
        print("ITRUEDIV")
        self.value /= other

test = NewInt(10)
test / 10
test /= 10
输出

TRUEDIV
ITRUEDIV
“支持python2和python3(不可协商)”
FWIW,请记住python2.7将在2个月(1.1.2020)内达到EOL
“支持python2和python3(不可协商)”
FWIW,请记住python2.7将在2个月(1.1.2020)内达到EOL