Anotaciones de tipo en Python pt2



@eduardo_gpg

Número de visitas 1258

Tiempo de lectura 2 min

13 Marzo 2021

En una entrega anterior hablamos de sobre las anotaciones en Python, un feature del lenguaje que nos permite comprender, de mejor manera, el código que estamos creando, pudiendo así "definir" los tipos de datos para nuestras variables. 🍻

Las anotaciones son una gran herramienta que el lenguaje nos provee, no solo facilitan la lectura del código, si no que hace que este sea fácil de testear, y por supuesto mantener. Inclusive, utilizando anotaciones, los desarrolladores que vengan de lenguajes con un tipado estático, por ejemplo Java, C, C# etc... se les será mucho más ameno integrarse a proyectos escritos en Python. 🐍

Si bien, en ese post no hicimos uso de ningún tipo módulo o librería externa para poder definir los tipos de datos, creo necesario expliquemos en detalle el módulo typing de la biblioteca standard de Python. Módulo con el cual podremos definir tipos de colecciones para las anotaciones. Ya sean listas, tuplas, diccionarios, sets, etc...

Veamos.

Módulo typing

Comencemos con las colecciones de tipo listas. Y para ello usaremos la clase List. Aquí un ejemplo.

from typing import List

alumnos: List[str] = ['Eduardo', 'Raquel', 'Fernando']

El módulo typing, como lo mencionamos anteriormente, se encuentra en la biblioteca standard de Python, por lo tanto no será necesario instalar absolutamente nada.

Para las tupla y los diccionarios sería exactamente igual, solo que utilizando las clase Tuple y Dict respectivamente.

from typing import Dict
from typing import Tuple

configuraciones: Tuple[str] = ['localhost, 'root', '3306']

# Definimos los tipos para las llaves y los valores a almacenar
usuarios: Dict[str, int] =  {'eduardo': 1, 'Raquel': 2, 'Fernando': 3} 

Algo interesante del módulo typing es la capacidad que tenemos de poder definir de forma concreta cada uno de los items para, ya sea nuestra tupla o lista. Logramos esto utilizando la clase Union. 🥳

from typing import Dict
from typing import Tuple
from typing import Union

configuraciones: Tuple[Union[str, str, bool, int] ] = ['localhost, 'root', true, 3306]

Para este ejemplo indicamos que los 2 primeros valores para nuestra tupla serán de tipo string, el tercer valor será de tipo boolean, y por último, el cuarto valor será de tipo entero.

En dado caso no sepamos los tipos de datos que pueda almacenar nuestra colección, haremos uso de la clase Any.

from typing import List
from typing import Any

listado: List[Any] = [1, 2, 3, '4', True, False, 'localhost']

Con esto indicamos que ahora nuestra lista puede almacenar cualquier tipo de datos.

Por supuesto, la clase Any también puede ser utilizada para las funciones. 😎

from typing import Any

def foo(item: Any) -> Any:
    item.bar()

Nuevos tipos

Algo super cool del módulo typing, es la posibilidad de definir nuevos tipos de datos de datos. Con esto seremos aun más explícitos sobre que tipo de valores podrán, o no, almacenar nuestras variables.

Veamos un ejemplo, definamos el tipo de datos id.

from typing import NewType

ID = NewType('id', int)
user_id = ID(1)

Para poder crear un nuevo tipo de datos haremos uso de la clase NewType.

En este ejemplo creamos el nuevo tipo de dato id, que podrá almacenar un valor entero. De igual forma definimos la variable user_id de tipo id.

Un ejemplo de como podemos implementar nuestros nuevos tipos de datos pudiera ocurrir en los parámetros de nuestras funciones.

from typing import NewType

ID = NewType('id', int)

def search_user(user_id: int) -> Any:
    # Nuestro super algoritmo de bisqueda
    pass

user_id = ID(1)
search_user(user_id)

En este caso indicamos que la función search_user recibirá como parámetro un valor de tipo id.

Que bien, si somos sinceros, podemos pasar de crear nuestros propios tipos de datos, ya que, literal, si accedemos al tipo, obtendremos como resultado el tipo base que hemos definido. 😯

>>> type(user_id)
int

¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍