If I've understood the PEP correctly, it would cause the following simple 
example to fail:
```python
from dataclasses import dataclass

@dataclass
class User:
    name: str
    friends: list[User]
```
In fact, when the `dataclass` decorator is called, `User` class is not yet 
added to the module namespace, so when class `__annotations__` descriptor will 
be called inside the decorator, it will raise a `NameError` because of 
`friends` recursive annotation.

By the way, in the example given by the PEP:
```python
def foo(x: int = 3, y: MyType = None) -> float:
     ...
class MyType:
     ...
```
if `foo` is decorated with a decorator calling `__annotations__` or 
`get_type_hints`, it will fail too.

Using stringified annotations would prevent `NameError` to be raised, but it 
really mitigates the PEP claim that 
> This PEP also solves the forward reference problem

Not only this PEP doesn't solve (again, if I understand it correctly) the 
forward reference problem, but also it makes it a lot more tricky. And I think 
my first example is not so uncommon.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/CDCDXBKQF6ALDEM4EEUGEK654XOKJG3I/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to