目次
1. Introducción
¿Por qué es importante verificar los tipos en Python? Python es un lenguaje de tipado dinámico, lo que significa que el tipo de las variables u objetos se determina en tiempo de ejecución. Gracias a su diseño flexible, no es necesario declarar explícitamente los tipos; sin embargo, esta misma flexibilidad puede causar errores de tipo inesperados o fallos en la ejecución. Por lo tanto, la verificación de tipos es esencial para mantener la fiabilidad y estabilidad de los programas en Python. En este artículo explicaremos los métodos principales de verificación de tipos en Python:type()
, isinstance()
y otras técnicas avanzadas.2. Descripción general de los tipos de datos en Python
Python ofrece diversos tipos de datos, como números, cadenas, listas y diccionarios. Cada tipo tiene un propósito específico, y la verificación de tipos ayuda a prevenir errores inesperados.Tipos de datos principales
- Tipos numéricos (int, float) Los tipos numéricos incluyen
int
para enteros yfloat
para números decimales.
num1 = 10
num2 = 3.14
print(type(num1)) # <class 'int'>
print(type(num2)) # <class 'float'>
- Tipo de cadena (str) Se utiliza para almacenar datos de texto. Se define entre comillas simples o dobles.
text = "Hello, World!"
print(type(text)) # <class 'str'>
- Tipo lista (list) Una lista es una colección ordenada que puede contener múltiples elementos. Se define con
[]
y permite varias operaciones.
mylist = [1, 2, 3, 4]
print(type(mylist)) # <class 'list'>
- Tipo diccionario (dict) Un diccionario almacena datos en pares clave-valor y se define con
{}
.
mydict = {"one": 1, "two": 2}
print(type(mydict)) # <class 'dict'>

3. Verificación de tipos con type()
La función type()
es una función incorporada básica que devuelve el tipo de un objeto. Es útil para obtener rápidamente el tipo de una variable u objeto.Uso básico de type()
En el siguiente ejemplo, se utiliza type()
para verificar el tipo de una variable.myvar = 1234
print(type(myvar)) # <class 'int'>
También se puede aplicar a otros tipos:mystr = "Hello"
print(type(mystr)) # <class 'str'>
Ventajas y limitaciones de type()
Aunque type()
permite comprobar tipos de forma sencilla, no considera las subclases. Solo verifica la coincidencia exacta con el tipo especificado.class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(type(dog) == Animal) # False
En este caso, Dog
hereda de Animal
, pero type()
devuelve False
. Para verificar subclases, es preferible usar isinstance()
.4. Verificación de tipos con isinstance()
La función isinstance()
se usa para comprobar si un objeto pertenece a un tipo específico o a una de sus subclases. Permite una verificación de tipos más flexible.Uso básico de isinstance()
myvar = 1234
print(isinstance(myvar, int)) # True
Aquí myvar
es de tipo int
, por lo que devuelve True
.Comprobación de múltiples tipos
isinstance()
admite tuplas de tipos para verificar varios al mismo tiempo.value = 3.14
print(isinstance(value, (int, float))) # True
Verificación de subclases
isinstance()
también reconoce relaciones de herencia.class Animal:
pass
class Dog(Animal):
pass
dog = Dog()
print(isinstance(dog, Animal)) # True

5. Otros métodos de verificación de tipos
Además detype()
e isinstance()
, Python ofrece otras formas de verificar tipos, útiles en contextos específicos.Función issubclass()
Comprueba si una clase es subclase de otra.class Animal:
pass
class Dog(Animal):
pass
print(issubclass(Dog, Animal)) # True
Módulo collections.abc
Facilita la verificación de tipos relacionados con colecciones como listas o diccionarios.import collections.abc
mylist = [1, 2, 3]
print(isinstance(mylist, collections.abc.Sequence)) # True
Sugerencias de tipo con typing
El módulo typing
introduce comprobaciones de tipo estáticas en el código, mejorando la legibilidad y facilitando la depuración.from typing import List
def greet(names: List[str]) -> None:
for name in names:
print(f"Hello, {name}!")
Verificación de NoneType
NoneType
es el tipo del objeto especial None
. Su verificación ayuda a evitar errores inesperados.myvar = None
print(type(myvar)) # <class 'NoneType'>
Esto es útil, por ejemplo, al comprobar si una función devuelve None
.