Terry J. Reedy added the comment:

The current doc is correct. Unlike the old incorrect version of the operator 
doc (#7259), it does not say that the call is all of the execution. The 
suggested replacement "x = x.__iadd__(y) is called" is not correct as 
statements are not called.

The said, it seems that some people miss the fact that augmented assignment 
always does an assignment. So, considering that the first sentence of the 
paragraph, "These methods are called to implement the augmented arithmetic 
assignments (+=, -=, *=, /=, //=, %=, **=, <<=, >>=, &=, ^=, |=)." already 
talks about calling, I thing

"For instance, to execute the statement x += y, where x is an instance of a 
class that has an __iadd__() method, x.__iadd__(y) is called. If x is an 
instance of a class that does not define a __iadd__() method, x.__add__(y) and 
y.__radd__(x) are considered, as with the evaluation of x + y."

might be replaced by

"For instance, if x is an instance of a class with an __iadd__() method, x += y 
is equivalent to x = x.__iadd__(y) . Otherwise, x.__add__(y) and y.__radd__(x) 
are considered, as with the evaluation of x + y."

----------
keywords: +patch
nosy: +terry.reedy
stage:  -> needs patch
versions:  -Python 2.6, Python 3.1, Python 3.2, Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue19953>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to