Generic[T_co] erroring when T_co = TypeVar("T_co", A, B, covariant=True) and passed subclass of A
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
I am reporting what I believe is a bug in mypy's interpretation of TypeVar when passed two constraining types and also covariant=True.
I think the below code sample is valid (per Liskov Substitution Principle), and is erroneously being reported as a type error by mypy. Here is my working example:
from typing import TypeVar, Generic, Union
class A:
pass
class ASub(A):
pass
class B:
pass
# Case 1... Success: no issues found
# T_co = TypeVar("T_co", covariant=True)
# Case 2... error: Value of type variable "T_co" of "SomeGeneric" cannot be "ASub" [type-var]
T_co = TypeVar("T_co", A, B, covariant=True)
# Case 3... Success: no issues found
# T_co = TypeVar("T_co", bound=Union[A, B], covariant=True)
class SomeGeneric(Generic[T_co]):
pass
class SomeGenericASub(SomeGeneric[ASub]):
pass
Potentially Related Issue
I may be re-asking the contents of https://github.com/python/mypy/issues/8611, but to be honest, I get confused by the core of the issue
non-empty covariant generic subclass of a contravariant base
Versions
python==3.6.5
mypy==0.770
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 gemeldeten Case 2 mit Python 3.6.5 und mypy 0.770 zu reproduzieren, und vergleiche dann sein Verhalten bei eingeschränktem TypeVar mit den Beispielen ohne Einschränkung und mit Bound. Lies die möglicherweise verwandte Diskussion in issue #8611; abgeschlossen ist die Untersuchung, wenn das beabsichtigte Verhalten für SomeGeneric[ASub] festgestellt ist und die fehlerhafte Diagnose behoben oder erklärt wurde.
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