python / python/mypy

Strange behavior with dataclass InitVar

Ouverte
#8,439 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.