es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se usan las sugerencias de tipos de Python cuando se tienen tipos de entrada desordenados?

Tengo una función que espera una lista de objetos similares a fechas, y estoy buscando una forma de agregar buenos indicios de tipo.

La que estoy usando ahora es:

def get_prices(dates: list[str]) -> list[float]:

pero no estoy completamente satisfecho con esto.

Podría crear una clase DateLike y luego hacer lo siguiente:

def get_prices(dates: list[DateLike]) -> list[float]:

pero no estoy seguro si esto es apropiado ya que la clase DateLike no estaría involucrada en absoluto (excepto en el indicio de tipo).

En ese punto, podría hacer:

def get_prices(dates: IterableOfObjectsThatCanBeCastToDatesByPandas) -> list[float]:

Pero entonces los indicios de tipo han perdido todo significado.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Python y en la escritura de tipos, mi recomendación sería utilizar el tipo de dato Union para permitir que se acepten múltiples tipos de objetos similares a las fechas como entrada para la función get_prices. Por ejemplo:

    from typing import Union
    
    def get_prices(dates: Union[list[str], list[date], list[datetime]]) -> list[float]:
       ...
    

    Esto permitiría pasar listas de cadenas de texto, fechas y datetimes como argumentos a la función.

    Alternativamente, podrías crear una clase personalizada Date que herede de la clase integrada date e incluya cualquier funcionalidad adicional o atributos que necesites. Luego, podrías utilizar esta clase personalizada Date como tipo de dato para el parámetro dates:

    from datetime import date
    class DateLike(date):
        ...
    
    def get_prices(dates: list[DateLike]) -> list[float]:
       ...
    

    Esto garantizaría que solo se puedan pasar objetos de la clase DateLike (o de cualquier subclase) como argumentos a la función get_prices. Sin embargo, esto podría ser excesivo si solo necesitas realizar operaciones básicas en las fechas de la lista.

Comments are closed.