Eryk Sun <eryk...@gmail.com> added the comment:

If the target object of an augmented assignment doesn't support the in-place 
binary operation, the normal binary operation is used instead. Thus an 
augmented assignment is implemented to always assign the result back to the 
target. For an attribute, that's similar to `x.a += 1` -> `x.a = x.a + 1`. For 
example:

    >>> dis.dis('x.a += 1')
                  0 RESUME                   0

      1           2 LOAD_NAME                0 (x)
                  4 DUP_TOP
                  6 LOAD_ATTR                1 (a)
                  8 LOAD_CONST               0 (1)
                 10 BINARY_OP               13 (+=)
                 12 ROT_TWO
                 14 STORE_ATTR               1 (a)
                 16 LOAD_CONST               1 (None)
                 18 RETURN_VALUE

Note the STORE_ATTR instruction in the above bytecode.

As to __slots__, I think that class construction should store it as a tuple, 
unless maybe I'm overlooking some use case.

----------

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

Reply via email to