Final (context-sensitive Literal) doesn't support type narrowing
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Merge medio
- 1g 18h
- PR unite (30g)
- 54
Descrizione
Bug Report
Maybe there's a reason this is not supported, but at a quick look it seems like it should work. When a union of context-sensitive Literals are used, it fails to perform type narrowing, whereas explicit Literals do work.
To Reproduce
from typing import Final, Literal
class TXTRecord:
type: Final = "TXT"
text: str = "Foo"
class ARecord:
type: Final = "A"
host: str = "192.168.1.1"
record: TXTRecord | ARecord
reveal_type(record.type)
if record.type == "TXT":
print(record.text) # error with Final, but not with Literal
else:
print(record.host) # error with Final, but not with Literal
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia eseguendo la riproduzione Python fornita e confronta il suo comportamento di narrowing con il caso equivalente di Literal esplicito. Il lavoro è completato quando l’unione basata su Final viene ristretta a TXTRecord e ARecord nei due rami senza produrre gli errori di attributo segnalati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 45/100