Я знаю о методе __add__ для переопределения плюс, но когда я использую это для переопределения + =, я получаю одну из двух проблем:
(1) если __add__ мутирует себя, то
z = x + y
будет мутировать x, когда я действительно не хочу, чтобы x там был изменен.
(2), если __add__ возвращает новый объект, тогда
tmp = z
z += x
z += y
tmp += w
return z
будет возвращать что-то без w, так как z и tmp указывают на разные объекты после выполнения z += x.
Я могу сделать какой-то метод .append(), но я бы предпочел перегрузить +=, если это возможно.