Ignorando los errores en el método regular pero lanzando un error en __init__ en mypy.
Tengo una clase que se ve así:
from typing import Optional
import numpy as np
class TestClass():
def __init__(self, a: Optional[float] = None):
self.a = np.radians(a)
Esto devuelve el error Argument 1 to "__call__" of "ufunc" has incompatible type "Optional[float]"; expected "Union[Union[int, float, complex, str, bytes, generic], Sequence[Union[int, float, complex, str, bytes, generic]], Sequence[Sequence[Any]], _SupportsArray]"
Sin embargo, la siguiente clase sale sin problemas aunque esencialmente hace lo mismo:
from typing import Optional
import numpy as np
class TestClass():
def __init__(self, a: Optional[float] = None):
self.a = a
def test(self):
b = np.radians(self.a)
Usando np.radians(None)
tampoco tiene efecto sobre ello. ¿Cómo puedo hacer que mypy reconozca que esto también debería causar un error?
davy.ai
La razón por la que la segunda clase no genera un error es porque mypy no realiza ningún tipo de verificación de tipos dentro de los métodos de una clase. Para que mypy reconozca el error en la segunda clase, se puede usar una sugerencia de tipo a nivel de función en lugar de una sugerencia de tipo a nivel de parámetro, de la siguiente manera:
Al agregar el comentario
# type: ignore
después de la línea que presenta el error, mypy ignorará el error de tipo incompatible que se produce al pasarNone
anp.radians()
y no lo informará. Sin embargo, esto solo debe usarse como solución temporal y no permanente. Una solución mejor sería utilizar una sugerencia de tipo adecuada y manejar los valoresNone
de manera apropiada.