[PEP 695] Incorrect Variance Computation with Polymorphic Constructor.
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
In the example below, all 3 classes should be covariant in their generic type. However, mypy seems to infer that only Bar and Baz are covariant, but not Foo. Code sample in pyright playground, mypy playground
from collections.abc import Sequence
from typing import Generic, TypeVar
class Foo[T](Sequence[T]):
@classmethod
def new[T2](cls: "type[Foo[T2]]", arg: list[T2]) -> "Foo[T2]": ...
class Bar[T](Sequence[T]):
@classmethod
def new[T2](cls, arg: list[T2]) -> "Bar[T2]": ...
_T_co = TypeVar("_T_co", covariant=True)
_S = TypeVar("_S")
class Baz(Sequence[_T_co], Generic[_T_co]):
@classmethod
def new(cls: "type[Baz[_S]]", arg: list[_S]) -> "Baz[_S]": ...
def test_foo_covariant(x: Foo[int]) -> Foo[object]:
return x # ❌ got "Foo[int]", expected "Foo[object]"
def test_bar_covariant(x: Bar[int]) -> Bar[object]:
return x
def test_baz_covariant(x: Baz[int]) -> Baz[object]:
return x
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
Führe zunächst das bereitgestellte Beispiel im mypy playground mit den verlinkten Python- und mypy-Versionen aus und vergleiche anschließend sein Verhalten mit dem pyright playground. Untersuche die Varianzinferenz für die drei PEP 695-Klassendefinitionen und polymorphen Konstruktoren; die Aufgabe ist abgeschlossen, wenn mypy Foo[int] akzeptiert, wo Foo[object] erwartet wird, wie es dies für Bar und Baz bereits tut.
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