python / python/mypy

Allow specifying length of sized object

Ouverte
#7,626 5 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature needs discussion priority-2-low
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Sometimes I want to specify the size of a container. This could be done manually with casts, but it would be really cool if Mypy could figure this out automatically. __len__() is guaranteed to return an int, and since a is defined as a literal the match could be statically inferrable. The same is true of other container types.

from typing_extensions import Protocol, Literal


class Char(Protocol):
    def __len__(self) -> Literal[1]:
        ...


a: Char = "X"

Mypy reports

error: Incompatible types in assignment (expression has type "str", variable has type "Char")
note: Following member(s) of "str" have conflicts:
note:     Expected:
note:         def __len__(self) -> Literal[1]
note:     Got:
note:         def __len__(self) -> int


Mypy 0.720
CPython 3.7.3

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 exécuter l’exemple fourni en Python 3.7.3 avec le comportement signalé de Mypy 0.720 et examinez comment la compatibilité des protocoles gère les types de retour de len et les valeurs Literal. Le travail est terminé lorsque l’affectation à Char est acceptée quand la taille du conteneur peut être déduite statiquement, avec un comportement équivalent pour les autres types de conteneurs.

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é
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

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