Type inference problem when tying a class with a type var
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
Please consider
import dataclasses as dtc
import typing as tp
T = tp.TypeVar('T', int, str, covariant=True)
@dtc.dataclass(frozen=True)
class C(tp.Generic[T]):
c: type[T]
c_decision: dict[bool, C] = {
True: C(int),
False: C(str),
}
reveal_type(c_decision[True])
reveal_type(c_decision[False])
then
$ mypy -V
mypy 0.942
$ mypy issues-mypy/t9.py
issues-mypy/t9c.py:15: note: Revealed type is "t9c.C*[Any]"
issues-mypy/t9c.py:16: note: Revealed type is "t9c.C*[Any]"
If I remove type annotation for c_decision
c_decision = {
True: C(int),
False: C(str),
}
then the output is
issues-mypy/t9c.py:15: note: Revealed type is "builtins.object*"
issues-mypy/t9c.py:16: note: Revealed type is "builtins.object*"
EDIT: rewriting the description to try to simplify the problem
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, mypy auf dem gezeigten Reproduzierer issues-mypy/t9.py oder der referenzierten Variante t9c.py auszuführen und die aufgedeckten Typen mit und ohne Annotation von c_decision zu vergleichen. Verfolge die Inferenz für C(int) und C(str); fertig, wenn das beabsichtigte Verhalten durch einen Regressionstest erfasst wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers, devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100