Dataclasses fields should evaluate their annotations
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Feature or enhancement
Proposal:
In Python 3.14 (a5), I was surprised that while
import dataclasses
@dataclasses.dataclass
class X:
a: X | None
print(X.__annotations__)
works as expected and prints,
{'a': __main__.X | None}
if one tries to look at the type of the field using the dataclasses.fields interface:
print(dataclasses.fields(X)[0].type)
then this instead results in a ForwardRef
ForwardRef('X | None')
Surely, someone trying to inspect the field would want the value version, consistent with the new default functionality of __annotations__ rather than trying to figure out how to evaluate the ForwardRef precisely.
The current behaviour was introduced in
where the dataclasses fields are constructed by reading the ForwardRef mode of annotationlib.
I believe this would be backwards in that the type value had to exists without from __future__ import annotations and would be a string with it.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
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 examiner le commit CPython référencé et la construction des champs de dataclasses qui lit le mode ForwardRef d'annotationlib. Comparez ce comportement aux valeurs évaluées dans annotations, puis déterminez la sémantique compatible de field.type et validez la modification proposée au regard des préoccupations documentées en matière de compatibilité ascendante.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100