Cannot infer type argument with TypeVarTuple and Callback protocol
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
To Reproduce
# mypy: enable-incomplete-feature=NewGenericSyntax
from collections.abc import Callable
from typing import Protocol
class ActionType(Protocol):
def __call__(self, var: str, context: int = 2) -> None: ...
class Job[*_Ts]:
def __init__(self, target: Callable[[*_Ts], None]) -> None:
self.target = target
def run_job[*_Ts](job: Job[*_Ts], *args: *_Ts) -> None: ...
def a1(action: ActionType) -> None:
job = Job(action)
run_job(job, "Hello") # -> error
Actual Behavior
error: Cannot infer type argument 1 of "run_job" [misc]
Expected Behavior
No error. Mypy should be able to tell that context has a default value and is thus optional. It already works from pure Callables (without the intermediate generic class).
def run_job_2[*_Ts](action: Callable[[*_Ts], None], *args: *_Ts) -> None: ...
def a2(action: ActionType) -> None:
run_job_2(action, "Hello") # works fine
Your Environment
- Mypy version used:
mypy 1.11.0+dev.177c8ee7b8166b3dcf89c034a676ef5818edbc38 (compiled: no)(current master) - Mypy command-line flags:
--enable-incomplete-feature=NewGenericSyntax(the bug exists with the old generic syntax as well) - 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
Beginne mit dem Reproducer und vergleiche den fehlschlagenden run_job-Pfad mit dem funktionierenden run_job_2-Beispiel unter Python 3.12 und dem NewGenericSyntax-Flag. Verfolge die Typinferenz für TypeVarTuple durch Job und den ActionType-Callback; als erledigt gilt die Aufgabe, wenn das erste Beispiel seine Argumente ohne Fehler ableitet und das bestehende Verhalten intakt bleibt.
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
- 35/100