Есть ли способ перегрузить + = в Python? - PullRequest
39 голосов
/ 08 апреля 2009

Я знаю о методе __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() метод, но я бы предпочел перегрузить +=, если это возможно.

1 Ответ

73 голосов
/ 08 апреля 2009

Да. Просто переопределите метод __iadd__ объекта, который принимает те же параметры, что и add. Вы можете найти больше информации здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...