Associated types on generics
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
-
Request Type: Feature Request
-
Mock-up repro (more detailed mock-up here):
import abc import typing # Define two base types `ABase` & `BBase` with a similar interface, # that each return a different object type `AValue` & `BValue` from # some method # # The object type is also reexposed as a class attribute on the # respective base type for easier access. class AValue: value: bytes def __init__(self, value: bytes): self.value = value class ABase(metaclass=abc.ABCMeta): VALUE_T = AValue @abc.abstractmethod def get_some_value(self) -> AValue: ... class BValue: value: str def __init__(self, value: str): self.value = value class BBase(metaclass=abc.ABCMeta): VALUE_T = BValue @abc.abstractmethod def get_some_value(self) -> BValue: ... # Define generic type over the two defined above AnyBase = typing.TypeVar("AnyBase", ABase, BBase) # # HOW WOULD I NAME THE RETURN TYPE IN THE NEXT LINE? # # In particular note that the return type could not be just `AnyBase` # (over which we are generic) since we aren't returning *that* type, # but some other type determined by which type `AnyBase` is. def magic_convert(input: AnyBase) -> AnyBase.VALUE_T: #??? return input.VALUE_T(self.get_some_value().value * 2)``` -
Actual behaviour: There does seem to be anything like
AnyBase.VALUE_Tavailable for use inmypyand the given syntax results in both type-time and runtime errors. -
Expected behaviour: Some way to do this.
-
mypy version: 0.730
-
Python version: 3.7 (Debian)
-
mypy flags: None
I used some title that probably is close to the real (type theory) name of this feature, feel free to change it to something more fitting. 🙂
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par la reproduction en Python 3.7 de l’issue et lisez la maquette détaillée liée pour comprendre la relation de type associé souhaitée. Définissez à quoi doivent ressembler la syntaxe prise en charge et le comportement de vérification des types pour le type de retour générique, y compris l’exemple magic_convert présenté ; l’issue est terminée lorsque mypy peut exprimer et valider cette relation sans les erreurs de typage ou d’exécution signalées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 30/100