Overlapping type
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 1.8k
- Fork
- 302
- Merge medio
- 23h
- PR unite (30g)
- 8
Descrizione
This is an rough idea from the recent discussion of whether to use object/Any or _KT for arguments of certain methods like pop or __sub__. E.g.:
class MyPoppable[KT, VT]:
def pop(self, x: X) -> VT: ...
What should X be? Using KT (or KT | None) finds type errors like the following:
poppable: MyPoppable[str]
poppable.pop(123)
But has a problem with overlapping types:
def foo(x: int | str):
poppable.pop(x)
On the other hand, using object doesn't catch type errors like poppable.pop(123).
The solution would be able to specify that any partially overlapping type would be accepted:
class MyPoppable[KT, VT]:
def pop(self, x: Overlapping[KT]) -> VT: ...
MyPoppable[str]().pop() would accept str, str | None, Literal["x"], str | int, etc., but not e.g. plain int.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
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 dagli esempi di tipi sovrapposti nell’issue e rivedi la discussione recente a cui fanno riferimento. Definisci la semantica prevista per un tipo Overlapping, incluse le unions, i letterali e i tipi non sovrapposti; il lavoro è completo quando il comportamento e le regole di tipizzazione sono concordati.
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
- 35/100