Python3-如何判断重载时是否应使用uu idiv uu或u div uu行为?
我正在编写一些处理/解析二进制数据的代码。整数提升是我处理各种整数类型时的一项要求。作为创建自定义整数类型的结果,并且因为我想支持python2和python3(不可协商),我需要重载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
\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