Я искал явный ответ, но самый близкий результат был в документации по питону здесь . Там написано:
Эти методы [дополненных арифметических назначений] должны пытаться выполнить операцию на месте (изменяя свое значение) и возвращать результат (который может быть, но не обязательно, собственным).
Это подразумевает, что self (и тип) неизменны, но действительно ли разработчик класса должен определить, или должна быть предпринята попытка всегда поддерживать тип?
Я знаю, что должен - это вопрос мнения. То, что я ищу, - это лучшее документированное свидетельство ожидаемого результата.
Возьмите класс NumString
ниже.
class NumString:
"""A class where the number is represented as a string.
other methods omitted for brevity.
"""
def __init__(self, value):
self.value = str(value)
def __str__(self):
return self.value
def __int__(self):
return int(self.value))
def __add__(self, other):
if '.' in self.value:
return float(self) + other
return int(self) + other
def __iadd__(self, other):
self.value = str(self + other)
return self