Specialized methods on generic classes
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
Let's say I have a generic class G.
from __future__ import annotations
from collections.abc import Sized
from typing import Generic, TypeVar
T = TypeVar("T")
class G(Generic[T]):
pass
I want to have a single method on this class that's only legal for a subset of T.
If I want to limit it to, say, int, it works:
class G(Generic[T]):
def test(self: G[int]) -> G[int]:
return self
G[int]().test() # Works, as it should
G[str]().test() # Error, as it should
But if I want to limit it to, say, a protocol like Sized, I get a false negative:
S = TypeVar("S", bound=Sized)
class G(Generic[T]):
def test(self: G[S]) -> G[S]:
return self
G[int]().test() # False negative - works, but it shouldn't
This is a pity, since it'd unlock some cool features I was working on vis-a-vis using attrs attributes. Are there any workarounds? Would this be handled by intersection types maybe?
Your Environment
- Mypy version used: mypy 1.0.0+dev.b8c03ab6809aab56928f3cd865edb44944a600a2
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files): - Python version used: Python 3.10.6
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
Empieza ejecutando el reproductor de Python proporcionado con la versión de mypy indicada y compara el comportamiento de la especialización int con el de la especialización limitada por Sized. Sigue la ruta de comprobación del self-type genérico y después añade o actualiza una prueba de regresión para que los métodos especializados con límites de protocolo se acepten o rechacen según el comportamiento previsto.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools, tooling
- 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