Strange behavior with dataclass InitVar
Ouverte
Personne n'a encore pris cette issue.
bug
priority-1-normal
topic-dataclasses
topic-usability
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Wondering what is going on here for the cases 3-6. Running it with --strict, mypy version is 0.761.
import dataclasses
from dataclasses import dataclass, InitVar
from functools import partial
dataclass_alias = dataclass
dataclass_partial = partial(dataclass, frozen=True)
dataclass_decorator = dataclass(frozen=True)
# 1. ok
@dataclass(frozen=True)
class X1:
value: InitVar[bool] = None
# 2. ok
@dataclasses.dataclass(frozen=True)
class X2:
default: InitVar[bool] = None
# 3. error: Incompatible types in assignment (expression has type "None", variable has type "InitVar[bool]")
@dataclass_alias(frozen=True)
class X3:
default: InitVar[bool] = None
# 4. error: Incompatible types in assignment (expression has type "None", variable has type "InitVar[bool]")
@dataclass_partial
class X4:
default: InitVar[bool] = None
# 5a. error: Too many arguments for "object"
# 5b. error: Incompatible types in assignment (expression has type "None", variable has type "InitVar[bool]")
@dataclass_partial()
class X5:
default: InitVar[bool] = None
# 6. error: Incompatible types in assignment (expression has type "None", variable has type "InitVar[bool]")
@dataclass_decorator
class X6:
default: InitVar[bool] = None
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 reproduire les cas fournis avec mypy 0.761 et comparez la manière dont chaque forme de décorateur dataclass est analysée. Suivez la gestion de InitVar et des alias ou partiels de décorateur ; le travail est terminé lorsque les cas ont un résultat documenté et cohérent, ainsi que des diagnostics ou des tests appropriés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 35/100