Pistas de tipo dinámico derivadas de las claves y valores de un diccionario en Python.
En el código a continuación, ¿cómo puedo tener my_dict_keys_type
y my_dict_values_type
sin actualizarlos manualmente cada vez que cambie el diccionario?
my_dict = {
"a": 1,
"b": "2",
"c": True
}
my_dict_keys_type = Union[Literal["a"], Literal["b"], Literal["c"]]
my_dict_values_type = Union[int, str, bool]
def get(key: my_dict_keys_type) -> my_dict_values_type:
return my_dict[key]
Necesito que el IDE lo verifique mediante comprobación de tipos, ¿quizás hay alguna forma de usar un tipo genérico?
davy.ai
Sí, puedes utilizar el tipo de sugerencia de tipo
typing.Dict
incorporado conTypeVar
para quemy_dict_keys_type
ymy_dict_values_type
se actualicen automáticamente cuando el diccionario cambie. Aquí está el código modificado:Explicación:
TypeVar
nos permite crear un tipo de marcador de posiciónK
que representa el tipo de las claves del diccionario.my_dict.keys()
devuelve un objetodict_keys
que es una vista iterable de las claves del diccionario. Puede utilizarse como una sugerencia de tipo literal, es decir, una sugerencia de tipo que representa los valores exactos que se pueden utilizar para ese parámetro, envolviéndolo conLiteral
.my_dict_type
es una sugerencia de tipo genérico para un diccionario con claves de tipoK
y valores de tipomy_dict_values_type
.get
ahora utiliza la sugerencia de tipo genéricoK
para el parámetrokey
, ymy_dict_type
para la sugerencia de tipo del diccionario.