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

Reply via email to