Anidamiento de Notación de Tipos Resultados Diferentes.
He estado intentando mejorar algunas clases de código con sugerencias de tipo. Estoy teniendo problemas con un problema de anidamiento. El parámetro de una función de interés es un contenedor iterable de objetos con tipos conocidos. Me cuesta hacer que mi IDE reconozca los tipos internos (lo cual es una comodidad agradable).
Estoy utilizando Python 3.9 en PyCharm, pero obtengo resultados similares en IPython.
Cuando uso la clase “Iterable” del módulo “typing”, el IDE no puede “ver a través” de los tipos internos. Lo mismo ocurre con “Collection”. Pero sí puede cuando uso “list” o “tuple” en el contenedor externo.
¿Es esto un problema del IDE o hay otra forma de empaquetarlo? Sería bueno poder enviar cualquier tipo de iterable a esta función, en lugar de codificarlo de forma rígida…
from datetime import datetime
from typing import Iterable
Data_collection = Iterable[tuple[datetime, str]]
Data_list = list[tuple[datetime, str]]
def foo(bar: Data_collection):
bar[1][0]. # no hay sugerencia de tipo en el objeto interno
def foo2(bar: Data_list):
bar[1][0]. # buena sugerencia de tipo en el objeto interno
Me proporciona resultados como estos (en PyCharm):
davy.ai
Parece que esto podría ser un problema con el uso de
Iterable
yCollection
del módulotyping
. Estas clases parecen no proporcionar una forma fácil de especificar los tipos internos del contenedor. Sin embargo, al usarlist
otuple
en el contenedor exterior sí parece proporcionar el tipado deseado para los objetos internos.Una posible solución podría ser definir un alias de tipo personalizado que combine el uso de
Iterable
contuple
olist
para el contenedor externo, junto con los tipos internos especificados. Por ejemplo:Esto debería proporcionar el tipado deseado tanto para el contenedor externo como para los objetos internos.