mypy incorrectly reports incompatible return types for overloaded methods
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
Bug Report
@overload
def foo(cls: type[dict], mapping: SupportsKeysAndGetItem[K, V], /) -> dict[K, V]: ...
@overload
def foo(cls: type[dict], mapping: SupportsKeysAndGetItem[str, V], /, **kwargs: V) -> dict[str, V]: ...
Return types are compatible.
class FrozendictBase(Generic[K, V]):
@overload
def __new__(
cls,
mapping: SupportsKeysAndGetItem[K, V],
/,
) -> 'FrozendictBase[K, V]': ...
@overload
def __new__(
cls,
mapping: SupportsKeysAndGetItem[str, V],
/,
**kwargs: V,
) -> 'FrozendictBase[str, V]': ...
Return types are also compatible, but mypy reports an error.
To Reproduce
- Download file.txt and save as
sandbox.py. - Run
mypy sandbox.py.
Expected Behavior
sandbox.py:8: error: Invariant type variable "V" used in protocol where covariant one is expected
This is due to #5775.
Actual Behavior
sandbox.py:8: error: Invariant type variable "V" used in protocol where covariant one is expected
sandbox.py:39: error: Overloaded function signatures 3 and 4 overlap with incompatible return types
sandbox.py:54: error: Overloaded function signatures 5 and 6 overlap with incompatible return types
Your Environment
- Mypy version used: mypy 0.950
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files): - Python version used: Python 3.10.4
- Operating system and version: Windows 10
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
Descarga el archivo enlazado y guárdalo como sandbox.py; después, ejecuta mypy sandbox.py para reproducir los diagnósticos de sobrecarga. Investiga los informes de tipos de retorno incompatibles para las firmas sobrecargadas 3/4 y 5/6; se considera terminado cuando esos informes ya no aparezcan, mientras permanece el error esperado de variable de tipo invariante.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- compilers, devtools
- 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