Specifying the return type of `__abs__` to be a `TypeVar` causes `expected "SupportsAbs[<nothing>]` error
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
Specifying the return type of __abs__ to be a TypeVar causes expected "SupportsAbs[<nothing>] error
The following works fine:
from typing import TypeVar
T = TypeVar("T", bound="Number")
class Number:
def __abs__(self: T):
return self
def square(self: T) -> T:
return self
def myabs(x: T) -> T:
return abs(x)
x = myabs(Number())
x.square()
But this produces an error:
from typing import TypeVar
T = TypeVar("T", bound="Number")
class Number:
def __abs__(self: T) -> T:
return self
def square(self: T) -> T:
return self
def myabs(x: T) -> T:
return abs(x)
x = myabs(Number())
x.square()
- What is the actual behavior/output?
error: Argument 1 to "abs" has incompatible type "T"; expected "SupportsAbs[<nothing>]"
- What is the behavior/output you expect?
No error, like in the first example.
- What are the versions of mypy and Python you are using?
Python 3.6 and MyPy 0.761
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 reproduciendo ambos fragmentos de Python con mypy 0.761 y compara cómo afectan las dos anotaciones de retorno de abs a la llamada abs(x). Sigue el recorrido de comprobación de tipos para SupportsAbs y los límites de TypeVar; estará hecho cuando la versión anotada no produzca ningún error incompatible-argument como la versión sin anotar.
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
- Bastante claro
- Aptitud para principiantes
- 42/100