Open d828e723-49da-4b9e-8347-462f9de55de8 opened 2 years ago
The dataclass transformation ignores attributes that are annotated as ClassVar. I think it should also ignore attributes that are annotated as TypeAlias.
Specifically, I have this usecase in mind:
class RunMode(Enum):
release = auto()
debug = auto()
@dataclass
class Run:
Mode: TypeAlias = RunMode
mode: Mode = Mode.release
From a typing perspective this is reasonable. See this thread about type aliases in class scopes: https://mail.python.org/archives/list/typing-sig@python.org/thread/CGOO7GPPECGMLFDUDXSSXTRADI4BXYCS/
However, it's a niche use case and we could decide that we don't want to further complicate the annotation parsing in dataclasses.py.
I think implementing this would add complexity to the code in dataclasses.py (though Eric's the expert!).
For your use case, is it essential that the type alias declaration be inside the class scope? Would it be possible for you to simply have the alias declaration in the global scope instead?
Same question as Alex: what does the TypeAlias being inside the class offer that being at module level doesn't?
There is of course no hard reason for not using the global scope. I just often have enums (or other types) that are very closely linked to one class. And it makes sense to me then to have a TypeAlias in that class so that I don't have to import the enum separately.
For normal classes, the nested TypeAlias works completely fine in the type checkers I tested (pyright and mypy). It's just dataclasses that are the problem.
But I see now that there is a general wish to keep the implementation of dataclass simple, which I can understand.
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields: ```python assignee = None closed_at = None created_at =
labels = ['type-bug', '3.8', '3.9', '3.10', '3.11', '3.7', 'library']
title = 'Dataclass transform should ignore TypeAlias variables'
updated_at =
user = 'https://github.com/thomkeh'
```
bugs.python.org fields:
```python
activity =
actor = 'thomkeh'
assignee = 'none'
closed = False
closed_date = None
closer = None
components = ['Library (Lib)']
creation =
creator = 'thomkeh'
dependencies = []
files = []
hgrepos = []
issue_num = 47166
keywords = []
message_count = 5.0
messages = ['416368', '416414', '416426', '416428', '416903']
nosy_count = 5.0
nosy_names = ['eric.smith', 'JelleZijlstra', 'AlexWaygood', 'GBeauregard', 'thomkeh']
pr_nums = []
priority = 'normal'
resolution = None
stage = None
status = 'open'
superseder = None
type = 'behavior'
url = 'https://bugs.python.org/issue47166'
versions = ['Python 3.7', 'Python 3.8', 'Python 3.9', 'Python 3.10', 'Python 3.11']
```