Overloaded generic constructors can cause spurious errors in class methods
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
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
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 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