Error on generic NamedTuple method that uses constrained type parameter
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
mypy reports The erased type of self ... is not a supertype of its class for a method on a generic NamedTuple when the class uses constrained type variables.
from typing import Generic, NamedTuple, TypeVar
S = TypeVar("S", str, bytes)
class Result(NamedTuple, Generic[S]):
value: S
def get_value(self) -> S:
return self.value
Produces:
main.py:8: error: The erased type of self "tuple[str, fallback=main.Result[str]]" is not a supertype of its class "tuple[S, fallback=main.Result[S]]" [misc]
main.py:8: error: The erased type of self "tuple[bytes, fallback=main.Result[bytes]]" is not a supertype of its class "tuple[S, fallback=main.Result[S]]" [misc]
Version
Observed with:
mypy 2.0.0 (compiled: yes)
This came up with some generic namedtuples in urllib.parse in typeshed (python/typeshed#15726).
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 generischen NamedTuple-Reproduzierer in main.py und führe ihn mit mypy 2.0.0 aus, um die beiden Fehler zur Selbstlöschung zu bestätigen. Verfolge mypy's Verarbeitung generischer NamedTuple-Methoden und eingeschränkter Typvariablen und füge dann einen Regressionstest hinzu, der zeigt, dass get_value ohne diese Fehler akzeptiert wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 65/100