Partial specialization of a generic type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
I have have a generic class hierarchy, mirroring the hierarchy of the type parameter. I am trying to add proper type annotations to these classes.
In the example below (gist here) I'm attempting to partially specialize the Root class:
from typing import Generic, TypeVar
_T = TypeVar("_T")
class Root(Generic[_T]):
def __init__(self, value: _T):
self.value = value
_Number = TypeVar("_Number", int, float)
class FooNumber(Root[_Number]):
def __init__(self, value: _Number):
super().__init__(value)
... mypy reports on the __init__ upcall from FooNumber.__init__():
test-mypy-typevar-inherit.py:13: error: Argument 1 to "__init__" of "Root" has incompatible type "int"; expected "_Number" [arg-type]
test-mypy-typevar-inherit.py:13: error: Argument 1 to "__init__" of "Root" has incompatible type "float"; expected "_Number" [arg-type]
The goal is to then declare FooInt deriving from FooNumer[int] (and similarly for FooFloat).
A direct specialization of FooInt from Root[int] shows (as expected) no issue, and I don't feel it's very clear why this FooNumber definition causes any problem.
It seems there would be no reason for those errors.
Note: this point was first raised on Gitter and on stackoverflow
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 dem verknüpften mypy-play-Reproduzierer und dem gezeigten Beispiel für generische Vererbung und untersuche anschließend, wie mypy den FooNumber.init()-Upcall prüft. Erledigt ist die Aufgabe, wenn die partielle Spezialisierung nicht mehr die gemeldeten incompatible-type-Fehler erzeugt, während FooInt und FooFloat FooNumber wie beabsichtigt spezialisieren können.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100