Yes, it’s https://bugs.python.org/issue34776
-- Eric > On Sep 27, 2018, at 12:05 PM, Ivan Levkivskyi <levkivs...@gmail.com> wrote: > > Do we have a b.p.o. issue about this? If no, then I would recommend to open > one, so that we will not loose track of this. > > -- > Ivan > > > >> On Sat, 22 Sep 2018 at 16:32, David Hagen <da...@drhagen.com> wrote: >> The new postponed annotations have an unexpected interaction with >> dataclasses. Namely, you cannot get the type hints of any of the data >> classes methods. >> >> For example, I have some code that inspects the type parameters of a class's >> `__init__` method. (The real use case is to provide a default serializer for >> the class, but that is not important here.) >> >> ``` >> from dataclasses import dataclass >> from typing import get_type_hints >> >> class Foo: >> pass >> >> @dataclass >> class Bar: >> foo: Foo >> >> print(get_type_hints(Bar.__init__)) >> ``` >> >> In Python 3.6 and 3.7, this does what is expected; it prints `{'foo': <class >> '__main__.Foo'>, 'return': <class 'NoneType'>}`. >> >> However, if in Python 3.7, I add `from __future__ import annotations`, then >> this fails with an error: >> >> ``` >> NameError: name 'Foo' is not defined >> ``` >> >> I know why this is happening. The `__init__` method is defined in the >> `dataclasses` module which does not have the `Foo` object in its >> environment, and the `Foo` annotation is being passed to `dataclass` and >> attached to `__init__` as the string `"Foo"` rather than as the original >> object `Foo`, but `get_type_hints` for the new annotations only does a name >> lookup in the module where `__init__` is defined not where the annotation is >> defined. >> >> I know that the use of lambdas to implement PEP 563 was rejected for >> performance reasons. I could be wrong, but I think this was motivated by >> variable annotations because the lambda would have to be constructed each >> time the function body ran. I was wondering if I could motivate storing the >> annotations as lambdas in class bodies and function signatures, in which the >> environment is already being captured and is code that usually only runs >> once. >> _______________________________________________ >> Python-Dev mailing list >> Python-Dev@python.org >> https://mail.python.org/mailman/listinfo/python-dev >> Unsubscribe: >> https://mail.python.org/mailman/options/python-dev/levkivskyi%40gmail.com > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/eric%2Ba-python-dev%40trueblade.com
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com