False positive: Callable arg types more strict than required
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Struggled to name this properly but here's a repro:
import typing
# Want to accept any callable with a string arg
CallableT = typing.Callable[[str], None]
def func(callable_m: dict[str, CallableT]) -> None:
callable_m['first']("a")
def first(a: str) -> None:
return None
def second(a: str) -> None:
return None
def third(b: str) -> None:
return None
# This mapping will fail because the callables will have type:
# Callable[[Arg(str, 'a')], None]
failed_mapping = {
'first': first,
'second': second
}
func(failed_mapping)
# By renaming the arg in `third` from `a` to `b` everything is groovy
passing_mapping = {
'first': first,
'third': third
}
func(passing_mapping)
https://mypy-play.net/?mypy=latest&python=3.11&gist=ff039c923e370f79a680c463ef627810
Easy workaround with renaming the arg but is a bit of a pain
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 con la riproduzione Python fornita e il link a mypy-play, quindi segui il controllo di compatibilità dei callable che confronta i nomi dei parametri. Conferma il comportamento con un test di regressione mirato; il lavoro è completo quando callable compatibili come first e second vengono accettati senza rinominare i loro parametri.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100