我正在处理一些处理/解析二进制数据的代码。整数提升是我处理各种整数类型的要求。创建自定义整数类型的结果AND并且由于我想支持python2和python3(不可转让),因此需要重载__div__
,__idiv__
和__truediv__
运算符。>
但是,在python3.7中,我无法告知为什么 truediv 被调用!示例:
class NewInt(object):
def __init__(self, value):
self.value = value
def __div__(self, other):
print("DIV")
return self.value / other
def __idiv__(self, other):
print("IDIV")
self.value /= other
def __truediv__(self, other):
print("TRUEDIV")
return self.value / other
test = NewInt(10)
test / 10
test /= 10
如果在python2.7中运行,我得到:
DIV
IDIV
如果在python3.7中运行,我得到:
TRUEDIV
TRUEDIV
如果仅调用__truediv__
,我怎么知道何时进行就地分割?
答案 0 :(得分:2)
您没有实现__itruediv__
,它与Python 2的__idiv__
等效。
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