Как реализовать «__iadd __ ()» для неизменяемого типа?
Я хотел бы создать подкласс неизменяемого типа или реализовать свой собственный, который ведет себя какint
делает, как показано в следующем сеансе консоли:
>>> i=42
>>> id(i)
10021708
>>> i.__iadd__(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__iadd__'
>>> i += 1
>>> i
43
>>> id(i)
10021696
Не удивительно,int
объекты не имеют__iadd__()
метод, но применяя+=
к одному не приводит к ошибке, вместо этого он, очевидно, создает новыйint
а также каким-то волшебным образом переназначает его на имя, указанное в расширенном операторе присваивания.
Можно ли создать пользовательский класс или подкласс встроенного неизменяемого класса, который делает это, и если да, то как?