Antoine Pietri <antoine.piet...@gmail.com> added the comment:

Tracking down the issue a bit further:

    a = 10


    def main():
        a = 42

        class wtf():
            print(a)

        class wtf2():
            print(a)
            a = 2


    main()

prints:

    42
    10


It seems that when there is an assignation in the class body, prior usages of 
the variables in the class body are done by loading the variable using 
LOAD_NAME instead of LOAD_CLASSDEREF:


Disassembly of <code object wtf at 0x7fa1b8b01390, file "lolmul.py", line 7>:
[...]

  8           8 LOAD_NAME                3 (print)
             10 LOAD_CLASSDEREF          0 (a)
             12 CALL_FUNCTION            1
             14 POP_TOP
             16 LOAD_CONST               1 (None)
             18 RETURN_VALUE

Disassembly of <code object wtf2 at 0x7fa1b8b018a0, file "lolmul.py", line 10>:
[...]

 11           8 LOAD_NAME                3 (print)
             10 LOAD_NAME                4 (a)
             12 CALL_FUNCTION            1
             14 POP_TOP

 12          16 LOAD_CONST               1 (2)
             18 STORE_NAME               4 (a)
             20 LOAD_CONST               2 (None)
             22 RETURN_VALUE

----------
nosy: +antoine.pietri

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

Reply via email to