python / python/mypy

Type inference into function

Offen
#14,236 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

Feature

I tried to search using some keywords and couldn't find anything obvious. But I was trying to do type validation of a class that I don't control (external sdk) and it has a class with optional fields. I'd like to write a function to validate that the instance I am passed as the correct field types, instead of doing it all in one.

Pitch

Ability to do type validation of objects you don't have control of in a subfunction, instead of in a main function.

import typing as t


class Test:
    opt: t.Optional[str]


def validate_test(t: Test) -> None:
    assert (t.opt)


def check_test_not_working() -> None:
    t = Test()
    validate_test(t)
    # Expect str, get Union[str, None]
    reveal_type(t.opt)


def check_test_working() -> None:
    t = Test()
    assert (t.opt)
    # Expect str, get str
    reveal_type(t.opt)

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 Problem mit den gezeigten Beispielen für Test, validate_test und reveal_type zu reproduzieren, und untersuche dann, wie mypy die Typverengung über Funktionsaufrufe hinweg propagiert. Als abgeschlossen gilt die Arbeit, wenn ein unterstützter Ansatz ermöglicht, dass die Assertion der Hilfsfunktion t.opt beim Aufrufer verengt, während das bestehende Verhalten von Optional erhalten bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

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