Я работаю над кодом, который обрабатывает / анализирует двоичные данные. Целочисленное продвижение является требованием в моей работе с различными целочисленными типами. В результате создания пользовательских целочисленных типов 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__
?