Guido van Rossum <[email protected]> added the comment:
Hum, there seems to be an actual bug here: even with PEP 563, the annotations
for "complex targets" are evaluated. For example:
from __future__ import annotations
class C:
x.y: z.w
a: b.c
The relevant parts of the disassembly of the code for the class object are:
3 10 LOAD_NAME 3 (x)
12 POP_TOP
14 LOAD_NAME 4 (z)
16 LOAD_ATTR 5 (w)
18 POP_TOP
4 20 LOAD_CONST 1 ('b.c')
22 LOAD_NAME 6 (__annotations__)
24 LOAD_CONST 2 ('a')
26 STORE_SUBSCR
So for x.y: z.w, not only do we evaluate x, we also evaluate z.w; whereas b.c
is not evaluated (the stringified version is added as __annotations__['a']).
I think the "LOAD_NAME(x), POP_TOP" part is correct, but "LOAD_NAME(z),
LOAD_ATTR(w), POP_TOP" should not be generated at all.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue42737>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com