ClassVar[TypeAlias] in dataclass-like classes becomes Any
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Description
Bug Report
When defining a type alias within a dataclass (or attrs) class, it has to be marked as ClassVar[^1] which causes the field to be treated as Any.
This bug has been already reported in https://github.com/python/mypy/issues/9238#issuecomment-1089065588 but never followed up.
To Reproduce
from dataclasses import dataclass
from typing import ClassVar, TypeAlias
@dataclass
class Namespace:
Alias: ClassVar[TypeAlias] = int
reveal_type(Namespace.Alias)
https://mypy-play.net/?mypy=latest&python=3.12&gist=e66e903f3b055fa8433707a5e8b99ebc
Expected Behavior
main.py:16: note: Revealed type is "int"
Actual Behavior
main.py:16: note: Revealed type is "Any"
Your Environment
See the playground. Python 3.12 on Mypy 1.9.0.
[^1]: The attrs plugin crashes with an assertion error if this is forgotten, but that's a bug for another day.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par exécuter le reproducteur Python fourni avec mypy 1.9.0 et comparez le type révélé avec le int attendu. Suivez la manière dont ClassVar[TypeAlias] est traité dans les classes de type dataclass, puis ajoutez ou mettez à jour la couverture afin que le type révélé ne soit plus Any ; l’assertion de attrs-plugin est explicitement hors périmètre.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100