`Any` subclass in `Dict` not being compatible with `Any` generates confusing message
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Found by @nipunn1313 in python/typeshed#4237. Please consider:
from typing import Any, Dict
class Foo(Any):
pass
d: Dict[Foo, Foo]
def bar(x: Dict[str, str]) -> None:
pass
bar(d) # error: Argument 1 to "bar" has incompatible type "Dict[Foo, Foo]"; expected "Dict[str, str]"
This fails with the error marked inline, while this passes:
from typing import Any, Dict
class Foo(Any):
pass
foo: Foo
def bar(x: str) -> None:
pass
bar(foo)
mypy version 0.780, Python 3.8.2.
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, den bereitgestellten Python-Reproduzierer mit mypy auszuführen und seine Diagnosen für Dict[Foo, Foo] und Foo zu vergleichen, wobei das gemeldete Verhalten von mypy 0.780 als Baseline verwendet wird. Verfolge den Typkompatibilitätspfad für ein Dict, das eine Unterklasse von Any enthält. Erledigt ist die Aufgabe, wenn der Dict-Fall nicht mehr die verwirrende Meldung über inkompatible Typen erzeugt, während der skalare Any-Unterklassen-Fall gültig bleibt.
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