Antoon Pardon wrote: > There is no instance variable at that point. How can it add 2, to > something that doesn't exist at the moment.
Because 'a += 1' is only a shorthand for 'a = a + 1' if a is an immutable object? Anyway, the behaviour is well documented. http://docs.python.org/ref/augassign.html says: An augmented assignment expression like x += 1 can be rewritten as x = x + 1 to achieve a similar, but not exactly equal effect. In the augmented version, x is only evaluated once. Also, when possible, the actual operation is performed in-place, meaning that rather than creating a new object and assigning that to the target, the old object is modified instead. ... For targets which are attribute references, the initial value is retrieved with a getattr() and the result is assigned with a setattr(). Notice that the two methods do not necessarily refer to the same variable. When getattr() refers to a class variable, setattr() still writes to an instance variable. For example: class A: x = 3 # class variable a = A() a.x += 1 # writes a.x as 4 leaving A.x as 3 -- http://mail.python.org/mailman/listinfo/python-list