'TypeVar's `bound` parameter does not play nice with overloads(?)
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
'TypeVar's bound parameter does not play nice with overloads(?)
To Reproduce
from typing import Union, TypeVar, overload
class C1:...
class C2:...
T = TypeVar('T', bound=Union[C1, C2])
@overload
def update(elt: C1) -> C1:...
@overload
def update(elt:C2) -> C2:...
def update(elt: Union[C1, C2]) -> Union[C1, C2]:
pass
def get_copy(elt: T) -> T:
new_elt = update(elt)
return new_elt
Expected Behavior
This should type-check(?)
Actual Behavior
I get errors:
type_tests.py:47: error: Argument 1 to "update" has incompatible type "T"; expected "B1"
type_tests.py:48: error: Incompatible return value type (got "D1", expected "T")
If I replace T = TypeVar('T', bound=Union[C1, C2]) with T = TypeVar('T', C1, C2, Union[C1, C2]), it
passes just fine
Your Environment
- Mypy version used: mypy 0.812
- Mypy command-line flags: None: command was
mypy type_tests.py - Mypy configuration options from
mypy.ini(and other config files): default - Python version used: 3.7.8
- Operating system and version: Ubuntu 16.04
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
Reproduziere die gemeldeten Fehler, indem du mypy type_tests.py mit den im Issue gezeigten TypeVar-bound- und Overload-Definitionen ausführst, und vergleiche sie anschließend mit der Variante mit constrained-TypeVar. Verfolge, wie mypy den bound während der Overload-Auflösung und der Prüfung des Rückgabetyps behandelt; abgeschlossen ist die Aufgabe, wenn das beabsichtigte Verhalten ermittelt und ein Regressionstest hinzugefügt wurde oder dokumentiert ist, warum der bound abgelehnt 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
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100