Associated types on generics
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
-
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. 🙂
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit der Python-3.7-Reproduktion im Issue und lies das verlinkte detaillierte Mock-up, um die gewünschte Beziehung des zugehörigen Typs zu verstehen. Lege fest, wie die unterstützte Syntax und das Verhalten der Typprüfung für den generischen Rückgabetyp aussehen sollen, einschließlich des gezeigten magic_convert-Beispiels; die Aufgabe ist abgeschlossen, wenn mypy diese Beziehung ohne die gemeldeten Fehler zur Typprüfungszeit oder zur Laufzeit ausdrücken und validieren kann.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 30/100