python / python/mypy

Mypy fails to correctly validate Type[T]

Offen
#8,681 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

topic-type-variables
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Dear all,

Consider the example code below:

from typing import Type, TypeVar, Tuple

T = TypeVar('T')


def func(a: T, a_type: Type[T]) -> Tuple[T, Type[T]]:
    return a, a_type


a1, a1_type = func(1, int)
a2, a2_type = func(1, str)

reveal_type(a1)
reveal_type(a1_type)
reveal_type(a2)
reveal_type(a2_type)

The first call to func shouldn't give rise to any issues, while the second one should complain about an incompatible type in the a_type argument (as type(1) is not str).

Yet, whenever I run mypy (Python 3.7; mypy 0.770; MacOS 10.15.1) it fails to produce any errors, even going as far to infer the type of a2 as object instead of int.

>>> mypy test.py
test.py:13: note: Revealed type is 'builtins.int'
test.py:14: note: Revealed type is 'Type[builtins.int]'
test.py:15: note: Revealed type is 'builtins.object'
test.py:16: note: Revealed type is 'Type[builtins.object]'

Is anyone familiar with this issue?

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 damit, das bereitgestellte Beispiel mit mypy auszuführen und die gemeldeten Typen und Diagnosen mit dem erwarteten Ergebnis zu vergleichen. Verfolge den Pfad der Typinferenz und der Argumentvalidierung für Type[T]; als erledigt gilt die Ablehnung von func(1, str), die Akzeptanz von func(1, int) und die korrekte Inferenz der aufgedeckten Typen.

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
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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