False positive: Callable arg types more strict than required
Abierto
Nadie ha tomado este issue todavía.
bug
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la reproducción de Python proporcionada y el enlace de mypy-play; después, sigue la comprobación de compatibilidad de callables que compara los nombres de los parámetros. Confirma el comportamiento con una prueba de regresión específica; se considera terminado cuando se aceptan callables compatibles como first y second sin renombrar sus parámetros.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- tooling
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100