python / python/mypy

Matching generic return type of `SupportsGetItem`

Offen
#21,731 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug Report

mypy does not match the generic return type of SupportsGetItem properly.

This was proposed in https://github.com/astral-sh/ty/issues/3988#issuecomment-4960290236.

To Reproduce

https://mypy-play.net/?gist=b8bb3085f195314a6c7c89ed2bdd2576

from __future__ import annotations

from typing import TYPE_CHECKING, Any, TypeVar

if TYPE_CHECKING:
    from _typeshed import SupportsGetItem

class Series: ...

class DataFrame:
    def __getitem__(self, key: object) -> Series:
        return Series()

T = TypeVar("T")

def f(x: SupportsGetItem[Any, T]) -> T:
    if isinstance(x, DataFrame):
        # return Series()
        return 1  # false error-free
    else:
        return x[0]

Expected Behaviour

Report an error about return type

Actual Behaviour

No error

Your Environment

mypy playground

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit der verknüpften mypy-play-Reproduktion und untersuche, wie SupportsGetItem[Any, T] behandelt wird, wenn der Kontrollfluss x auf DataFrame eingrenzt. Bestätige die erwartete Diagnose aus dem Beispiel, verfolge dann das relevante Verhalten der Typprüfung und füge für diesen Fall Tests hinzu oder aktualisiere sie. Als erledigt gilt die Aufgabe, wenn mypy den ungültigen Rückgabetyp meldet, anstatt return 1 zu akzeptieren.

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
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.