Lambda type cannot be inferred when type context includes a callable with a callable parameter
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
This was filed as a pyright bug. I noticed that mypy likewise doesn't handle this case, and I couldn't find any open issues that cover this.
Mypy playground link
from typing import Callable, Generic, TypeVar
T = TypeVar("T")
def func1(callable: Callable[[Callable[[T], T]], T]) -> T:
return callable(lambda x: x)
v1 = func1(lambda a: a(0))
reveal_type(v1) # Should be int
v2 = func1(lambda a: a(""))
reveal_type(v2) # should be str
class A(Generic[T]):
def __init__(self, value: T) -> None:
self.value = value
def func2(callable: Callable[[type[A[T]]], A[T]]) -> T:
return callable(A).value
v3 = func2(lambda A: A(0))
reveal_type(v3) # Should be int
v4 = func2(lambda A: A(""))
reveal_type(v4) # Should be str
Expected Results: No Errors and revealed types as indicated in the comments
Actual Results: Multiple errors ("Need type annotation for ...").
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 verlinkten mypy playground und führe den enthaltenen Python-Reproducer aus, der Callable, Generic und TypeVar verwendet. Vergleiche die aufgedeckten Typen für v1 bis v4 mit den erwarteten Ergebnissen int und str; abgeschlossen ist die Aufgabe, wenn die Beispiele keine Fehler erzeugen und diese Typen aufdecken.
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
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 35/100