mypy doesn't escape typevars from generics in self-type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
Passing a callable to another which matches the typevar with another typevar doesn't allow passing them into the return type. (if that makes no sense, the reproducer below is simple)
To Reproduce
from typing import Generic, TypeVar, Callable
T = TypeVar("T")
V = TypeVar("V")
class X(Generic[T]):
def f(self: X[Callable[[V], None]]) -> Callable[[V], V]:
def inner_f(v: V) -> V:
return v
return inner_f
reveal_type(X[Callable[[T], None]]().f()) # N: Revealed type is "def (Never) -> Never"
# ^ this should keep the generic
Expected Behavior
I don't expect a Never.
Your Environment
Checked on mypy playground.
- Mypy version used: v1.14
- Mypy command-line flags:
--strict - Mypy configuration options from
mypy.ini(and other config files): N/A - Python version used: 3.12
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
Führe zunächst den bereitgestellten generischen Self-Type-Reproducer unter mypy v1.14 mit --strict aus und untersuche, wie reveal_type XCallable[[T], None].f() auflöst. Verfolge den für das Ergebnis verantwortlichen Typinferenzpfad und betrachte das Issue als abgeschlossen, wenn die zurückgegebene Callable ihren generischen Typ beibehält, statt zu (Never) -> Never zu werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100