python / python/mypy

Cannot combine NewType and Literal

Ouverte
#9,650 1 commentaire 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature topic-literal-types topic-newtype
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

(This seems related to, but different from, #2448.)

Feature

Allow the creation of a NewType derived from Literal.

Pitch

Currently you can define the following types:

Foo = Literal["foo"]
Bar = NewType("Bar", str)

But you can't do this:

Baz = NewType("Baz", Foo)

If you attempt to, Python won't throw any error, but mypy will complain:

error: Argument 2 to NewType(...) must be subclassable

This prevents a strict definition of a literal-based type: you either have to accept all values of the literal's type or you need to lose the type check benefits of NewType.

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 retracer la façon dont mypy valide le deuxième argument de NewType et représente les types Literal, en utilisant l’exemple Baz = NewType("Baz", Foo) et l’erreur de possibilité de sous-classement signalée. Définissez le comportement attendu de la vérification de types pour un NewType dérivé de Literal, puis ajoutez une couverture montrant la définition acceptée et ses avantages en matière de vérification de types.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
compilers
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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