Generic type not inferred when valid constraint available
Offen
Dieses Issue hat noch niemand übernommen.
bug
topic-type-variables
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
from typing import reveal_type
def foo[T: (int, str, int | str)](*args: T) -> tuple[T, ...]:
return args
a = foo(0)
b = foo('')
c = foo(0, '')
d = foo('', 0)
reveal_type(a)
reveal_type(b)
reveal_type(c)
reveal_type(d)
$ mypy example.py
example.py:10: error: Value of type variable "T" of "foo" cannot be "object" [type-var]
example.py:11: error: Value of type variable "T" of "foo" cannot be "object" [type-var]
example.py:13: note: Revealed type is "builtins.tuple[builtins.int, ...]"
example.py:14: note: Revealed type is "builtins.tuple[builtins.str, ...]"
example.py:15: note: Revealed type is "builtins.tuple[builtins.object, ...]"
example.py:16: note: Revealed type is "builtins.tuple[builtins.object, ...]"
Found 2 errors in 1 file (checked 1 source file)
I'd expect c and d to be of type tuple[int | str, ...] as allowed by the constraints on T
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 damit, die example.py-Reproduktion mit mypy auszuführen und die angezeigten Typen und Fehler für alle vier Aufrufe zu vergleichen. Verfolge die Inferenz der Typvariablen-Constraints für die generische foo-Definition; abgeschlossen, sobald die Aufrufe mit gemischten int- und str-Werten akzeptiert werden und tuple[int | str, ...] anzeigen.
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
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100