[Python-Dev] Postponed annotations break inspection of dataclasses

Raymond Hettinger raymond.hettinger at gmail.com
Mon Sep 24 02:23:47 EDT 2018

> On Sep 22, 2018, at 1:38 PM, Yury Selivanov <yselivanov.ml at gmail.com> wrote:
> On Sat, Sep 22, 2018 at 3:11 PM Guido van Rossum <guido at python.org> wrote:
> [..]
>> Still, I wonder if there's a tweak possible of the globals and locals used when exec()'ing the function definitions in dataclasses.py, so that get_type_hints() gets the right globals for this use case.
>> It's really tough to be at the intersection of three PEPs...
> If it's possible to fix exec() to accept any Mapping (not just dicts),
> then we can create a proxy mapping for "Dataclass.__init__.__module__"
> module and everything would work as expected

FWIW, the locals() dict for exec() already accepts any mapping (not just dicts):

    >>> class M:
            def __getitem__(self, key):
                return key.upper()
            def __setitem__(self, key, value):
                print(f'{key!r}: {value!r}')
    >>> exec('a=b', globals(), M())
    'a': 'B'


More information about the Python-Dev mailing list