Can't assign default argument value to type when using ParamSpec
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug Report
I have a function that takes a Callable with ParamSpec, and I want to set a default for this parameter to a type.
To Reproduce
from typing import Callable, Concatenate, ParamSpec
P = ParamSpec("P")
class Foo:
def __init__(self, a: int, /, b: str) -> None:
self.a = a
self.b = b
def func(cls: Callable[Concatenate[int, P], Foo] = Foo) -> Callable[P, Foo]:
def wrapper(*args: P.args, **kwargs: P.kwargs) -> Foo:
return cls(1, *args, **kwargs)
return wrapper
However, mypy complains:
main.py:11: error: Incompatible default for argument "cls" (default has type "type[Foo]", argument has type "Callable[[int, **P], Foo]") [assignment]
Expected Behavior
I expect mypy to accept this default value, since removing the default and calling func works fine:
def func(cls: Callable[Concatenate[int, P], Foo]) -> Callable[P, Foo]:
def wrapper(*args: P.args, **kwargs: P.kwargs) -> Foo:
return cls(1, *args, **kwargs)
return wrapper
func(Foo)("b")
Your Environment
- Mypy version used: 1.5.1
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files): - Python version used: 3.11
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 el reproductor main.py y los ejemplos enlazados de mypy-play, y después sigue la comprobación del Callable predeterminado basado en ParamSpec. Compara las definiciones de func con y sin valor predeterminado. El trabajo estará terminado cuando se haya resuelto el error reportado de valor predeterminado incompatible para este ejemplo y el comportamiento esté cubierto por una prueba de regresión adecuada.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100