Covariant type variables should be allowed in class method
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
Currently, covariant type variables are allowed in __init__ so that you can put create an immutable containers with something inside of it. See https://github.com/python/mypy/issues/2850.
It would be useful if covariant types are also allowed in class method that serve as alternative constructors. Currently mypy errors on this example, which is an extension of the other issues example:
from typing import Generic, TypeVar
T_co = TypeVar("T_co", covariant=True)
class C(Generic[T_co]):
def __init__(self, x: T_co) -> None:
...
@classmethod
def custom_init(cls, x: T_co) -> "C[T_co]":
# error: Cannot use a covariant type variable as a parameter
return cls(x)
My use case is trying to define an immutable container protocol that has a create class method, which will initialize the container with some contents, like this:
T_cov = typing.TypeVar("T_cov", covariant=True)
class ListProtocol(typing_extensions.Protocol[T_cov]):
@classmethod
def create(cls, *items: T_cov) -> "ListProtocol[T_cov]":
...
def getitem(self) -> T_cov:
...
...
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 reproduciendo el problema con los ejemplos de classmethod del informe e inspecciona cómo mypy valida las variables de tipo covariantes en los parámetros de métodos. Define el comportamiento previsto para los constructores alternativos; después, añade cobertura de regresión que muestre los casos aceptados y ejecuta las pruebas relevantes del comprobador de tipos.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- tooling
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100