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 -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/CDCDXBKQF6ALDEM4EEUGEK654XOKJG3I/
Code of Conduct: http://python.org/psf/codeofconduct/