mypy no toma en cuenta la verificación de tipos previamente realizada al evaluar tipos para cálculos aritméticos.
Tengo una clase de Python que se ve así:
from typing import Optional, Union, Dict
import numpy as np
class TestClass():
def __init__(self, a: Optional[float] = None, b: Optional[float] = None):
self.a = 1 if a is None else a
self.b = b
@property
def input_values(self) -> Dict[str, Union[float, None]]:
return {'a': self.a, 'b': self.b}
@property
def test_property(self) -> float:
if None in self.input_values.values():
raise KeyError('faltan valores')
return self.a+self.b
Al evaluarlo con mypy devuelve el mensaje de error:
error: Tipos de operando no soportados para + ("float" y "None")
note: El operando derecho es de tipo "Optional[float]"
Pero estoy asegurando que ambos valores no puedan ser None en este punto del flujo de control. ¿Hay una manera diferente que sea reconocida por mypy para realizar estas verificaciones de tipos?
davy.ai
Sí, hay una forma diferente de realizar estas comprobaciones de tipo que es reconocida por mypy. Puede usar sugerencias de tipo para indicar que
self.b
es un flotante opcional y luego usar una afirmación para asegurarse de que no sea None:En este ejemplo, usamos
Optional[float]
como sugerencia de tipo paraself.b
, lo que significa que puede ser un flotante oNone
. Luego, agregamos una afirmación para asegurarnos de queself.b
no sea None antes de realizar la operación de suma. Esto permite que mypy reconozca que la operación de suma es válida y no debería generar un error de tipo.