python / python/mypy

(🐞) Generic Inference completely broken when a `TypeVar` has `None` in the `bound`

Aperta
#11,928 1 commento 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-type-variables
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

from typing import Generic, TypeVar, Iterable

T = TypeVar("T")
T1 = TypeVar("T1", bound=None)

class Test(Generic[T, T1]):
    def test(self) -> None:
        data1: list[T]
        data2: list[T] | list[T1]
        data3: list[T1] | list[T]
        
        reveal_type(tester(data1))  # list[T]
        reveal_type(tester(data2))  # list[object]
        reveal_type(tester(data3))  # list[Any]
        
        
def tester(a: Iterable[T]) -> list[T]: ...

The same thing happens if the bound is a union with None in it.

playground link

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 con il link fornito al playground mypy-play ed esegui l’esempio minimo con le impostazioni indicate di Python 3.10 e strict. Confronta i tipi rivelati con i commenti, quindi verifica lo stesso comportamento per un bound di unione che contenga None; il lavoro è concluso quando entrambi i casi inferiscono i tipi attesi.

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

Valutazione

Stack tecnologico
python
Ambito
compilers, devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.