python / python/mypy

Type inference into function

Aperta
#14,236 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

feature
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

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)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo il problema con gli esempi mostrati di Test, validate_test e reveal_type, quindi esamina come mypy propaga il narrowing attraverso le chiamate di funzione. Il lavoro è completato quando un approccio supportato consente all’asserzione della funzione helper di restringere t.opt nel chiamante, preservando il comportamento esistente di Optional.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.