When using `isinstance` to infer a generic type in a block, use any covariant bounds on the type variable.

Ouverte
#1,998 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
compilers, devtools

Piste de recherche

Start with the isinstance-based generic inference example in the issue and reproduce its reveal_type result for AppleAction. Done means covariant, bounded type variables are reflected in the inferred type rather than producing AppleAction[Any], with the behavior validated for the shown hierarchy.

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

Description

bug priority-1-normal topic-type-variables

I have a class hierarchy like the following:

class Apple(object): ...

T_co = TypeVar('T_co', covariant=True)
A_co = TypeVar('A_co', bound=Apple, covariant=True)

class Action(Generic[T_co]): ...

class AppleAction(Generic[A_co], Action[A_co]): ...

Later in my code, I have a block like so:

if isinstance(action, AppleAction):
   reveal_type(action)

And I get AppleAction[Any]. Because A_co is covariant, and bounded by Apple, even if A_co is bound to a subtype of Apple, the resulting object is going to be a valid instance of AppleAction[Apple]. I'd like to have action be AppleAction[Apple] in this case.

Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Merge moyen
1 j 18 h
PR mergées (30 j)
54

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.

Autres issues de python/mypy

Toutes les issues de python/mypy

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

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