Type checking en Python

Uriel Martinez
4 min readDec 29, 2020

Para hablar de Type Checking, daré una breve introducción de lo que es el tipado estático y dinámico.

Es bien sabido que existen diferentes tipos de lenguajes de programación. Generalmente se habla de si un lenguaje es compilado o interpretado, orientado a objetos o funcional y de bajo o alto nivel, pero muy pocas veces escuchamos de si un lenguaje es de tipado estático o dinámico.

Lo que diferencia esta última clasificación consiste en si el compilador del lenguaje verifica el tipo de los objetos, variables o funciones antes de correr o si se hace al momento de correr el programa.

El tipado estático se puede ver claramente en lenguajes como Java, C, C++, o Go, donde se tiene que especificar qué tipo de variable deseas usar, de lo contrario, el programa no compila. En contraste, en lenguajes como Python, JS, o PHP no es necesario especificar el tipo de las variables declaradas.

Los lenguajes de tipado dinámico incluso tienen sub clasificaciones donde hay lenguajes de tipado débil y fuerte, en el caso de JS, su tipado es débil, ya que el lenguaje permite operaciones entre distintos tipos. Por otro lado, Python, aun que no pide especificar el tipo de las variables al crearlas, no tiene tanta flexibilidad al momento de querer hacer operaciones entre distintos tipos.

Teniendo esto en cuenta, ambos tipados tienen sus pros y contras, los de tipado estático suelen ser lenguajes más difíciles de aprender pero suelen tener menos problemas a la hora de ser compilados, y en cuanto a los dinámicos, suelen ser fáciles de aprender, pero suele ser más frecuente encontrar algunos problemas, posteriores a que el código es ejecutado.

Es por eso que existen herramientas que permiten minimizar los problemas que puedan surgir en lenguajes como Python particularmente.

En el siguiente fragmento de código veremos un ejemplo simple del porque es útil el type checking, donde tenemos una función que suma dos números:

El código cómo tal, no mostraría ningún error, y no es hasta que se llama a la función suma(), donde regresaría un error argumentando que no es posible la suma entre una cadena de texto y un número entero.

Por otro lado, si le damos pistas al código de que es lo que espera recibir y devolver, hacemos más explícito lo que tenemos que mandar como argumentos a la función:

Añadiendo las etiquetas del tipo de argumento que esperamos y el tipo a devolver, muchos editores de código pueden ayudarnos a resaltar cuando el tipo que está recibiendo una función no es lo que está esperando. De esta forma podemos evitar errores antes de correr el programa.

Aun que el ejemplo parezca simple, en realidad es algo muy útil, ya que al trabajar con bases de código enormes, muchas funciones escritas pueden no dar ningún error, y es hasta el momento en que se ejecutan donde el código se rompe. Así, prevenimos que las funciones se usen para lo que fueron diseñadas.

Existe mucha atención sobre este tema en el mundo del código abierto (Open Source), donde muchísimos proyectos usan type checking.

Así mismo, existen herramientas para facilitar esta tarea, como PyType o MyPy, ya que, no todos los editores de texto nos previenen de estos problemas como en este caso PyCharm, ya que puede que trabajes en editores como vim, o cualquiera otro.

La mayoría de proyectos que he encontrado, usan Mypy, el cual, sin necesidad de correr una sola línea de código, hace el chequeo de tipos en tu código, lo único que tienes que hacer, es especificar con las funciones que va a recibir cada argumento y que espera regresar tu función.

De esta manera, le muestras a Mypy que es lo que tiene que buscar.

Conclusión

El chequeo de tipos puede parecer algo trivial a simple vista, y no es hasta que te encuentras con enormes proyectos con bastantes archivos y líneas de código y necesitas entender que está pasando con cada función, que recibe, que devuelve, e incluso declarar los tipos no es nada trivial ya que existen tipos especialmente diseñados que pueden ser clases creadas, diccionarios donde puedes especificar su contenido o permitir que cualquier cosa este dentro de ellos.

Realmente es un tema del cual puedes aprender y aprovechar bastante.

--

--