python / python/mypy

Overloaded generic constructors can cause spurious errors in class methods

Abierto
#7,935 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug false-positive priority-1-normal topic-overloads topic-type-variables
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

This fails, while it shouldn't:

from typing import TypeVar, Generic, overload

T = TypeVar('T')

class C(Generic[T]):
    @overload
    def __new__(cls) -> C[None]: ...
    @overload
    def __new__(cls, item: T) -> C[T]: ...
    def __new__(cls, item=None):
        ...
    @classmethod
    def f(cls, x: T) -> T:
        return x

C.f(42)  # Argument 1 to "f" of "C" has incompatible type "int"; expected "None"

I think the same also will happen with __init__(). The problem is because the return type of the first overload is always passed as an instance type to analyze_class_attribute_access().

Note: enabling test case testGenericClassInGenericFunctionOverloadedConstructor is blocked on this.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza en analyze_class_attribute_access() y reproduce el caso de constructor genérico sobrecargado mostrado en el issue. Investiga por qué el tipo de retorno de la primera sobrecarga se utiliza como tipo de instancia y, después, comprueba el comportamiento relacionado de init. Habilita testGenericClassInGenericFunctionOverloadedConstructor y confirma que el error espurio de método de clase ya no se produce.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
devtools
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.