Ivan Levkivskyi <levkivs...@gmail.com> added the comment:

> I'm not sure what can be done with this. The problem is that the decorator 
> doesn't know what's in the caller's namespace. The type being added is 
> "typing.Any". If the caller doesn't import typing, then get_type_hints will 
> fail (as demonstrated here).

IIUC the main problem is that get_type_hints() fails even if typing is 
imported. I would expect this to work (just repeating the original example in a 
more compact form):

import dataclasses
import typing
A = dataclasses.make_dataclass('A', ['a_var'])
typing.get_type_hints(A)  # This currently crashes

Interestingly, if I use a very similar call that it works:

>>> typing.get_type_hints(A, globalns=globals())
{'a_var': typing.Any}

So the core of the issue is that the globals are identified incorrectly, and 
indeed if I look at the generated class it looks wrong:

>>> A.__module__
'types'  # Should be '__main__'

I think we should fix the ``__module__`` attribute of the dynamically generated 
dataclasses (for example the way it is done for named tuples).

Btw, https://github.com/python/cpython/pull/14166 may potentially fix the 
``__module__`` attribute here too.

----------

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

Reply via email to