Como implementar “__iadd __ ()” para um tipo imutável?
Eu gostaria de subclassificar um tipo imutável ou implementar um dos meus próprios que se comporta como umint
faz como mostrado na seguinte sessão do console:
>>> 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
Não surpreendentemente,int
objetos não têm__iadd__()
método, ainda aplicando+=
para um não resulta em um erro, em vez disso, aparentemente, cria um novoint
e também, de alguma forma, reatribui-a magicamente para o nome dado na instrução de atribuição aumentada.
É possível criar uma classe ou subclasse definida pelo usuário de uma imutável embutida que faz isso e, em caso afirmativo, como?