python / python/mypy

Type of argument is not inferred for a TypeVar in a Generic type

Ouverte
#5,324 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

documentation priority-1-normal topic-type-variables topic-usability
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Mypy needs a type annotation for a variable that it could easily infer from the constructor argument annotations. This works perfectly with normal types. But using a TypeVar in a Generic type, somehow it doesn't.

from typing import Generic, TypeVar


class A:
    pass


class B:
    pass


T_Value = TypeVar("T_Value", A, B)


class Guess(Generic[T_Value]):
    def __init__(self, value: T_Value, confidence: float) -> None:
        self.value = value  # <-- line 17
        self.confidence = confidence

Mypy then complains it needs a type annotation

foo.py:17: error: Need type annotation for 'value'

This of course is no big deal since I can just add that annotation:

class Guess(Generic[T_Value]):
    def __init__(self, value: T_Value, confidence: float) -> None:
        self.value: T_Value = value
        self.confidence = confidence

But shouldn't mypy infer the type from the type annotations in the constructor?

If I'm doing something wrong please let me now.
I didn't find a similar issue but if this is a duplicate feel free to close.

I'm using:
Python 3.7.0, mypy 0.610, macOS 10.13.5

Same result with the current master (2018-07-05):
mypy 0.620+dev-f5058bcb269a55b33a02c3e3fd345541839bf06e

Flags I'm using:
strict_optional = true
ignore_missing_imports = true
follow_imports = silent

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

Reproduisez l’exemple Python inline avec les paramètres signalés strict_optional, ignore_missing_imports et follow_imports. Commencez par suivre l’inférence de mypy pour l’affectation de l’attribut Generic TypeVar ; le travail est terminé lorsque l’exemple ne nécessite plus d’annotation explicite et que le comportement est couvert par un test de régression.

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

Évaluation

Stack technique
python
Domaine
compilers
Type d'issue
Bug
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.