Cómo verificar el tipo de datos en Python (tipo vs isinstance)
Aprenda a verificar tipos de datos en Python. Comprenda cuándo usar type() frente a isinstance(), manejar clases personalizadas y escribir validaciones de verificación de tipos seguras.
Descripción general
Python es un lenguaje de tipo dinámico, lo que significa que las variables pueden contener valores de cualquier tipo de datos y su tipo puede cambiar durante la ejecución. Si bien esta flexibilidad acelera el desarrollo inicial, también requiere que usted verifique los tipos de variables en tiempo de ejecución antes de ejecutar operaciones específicas de tipo, como realizar aritmética con números enteros o llamar a métodos de cadena.
Para verificar el tipo de datos de un objeto, Python proporciona dos funciones principales: `type()` e `isinstance()`. La función `type(obj)` devuelve el tipo de clase preciso del objeto. Si bien puedes usar `type(obj) == int` para verificar si un número es un número entero, este método generalmente no se recomienda porque no admite estructuras de herencia (una subclase de un número entero se evaluaría como `False`).
La forma pitónica recomendada para verificar los tipos es `isinstance(obj, class_info)`. Esta función comprueba si un objeto es una instancia de la clase especificada o cualquier subclase heredada de ella. También admite la verificación con una tupla de clases (por ejemplo, `isinstance(value, (int, float))`), lo que hace que el código de validación sea muy flexible y robusto.
Código y salida de ejecución
Este script demuestra la verificación de tipos de variables usando type() e isinstance(), mostrando las diferencias en la herencia.
value_int = 42
value_str = "hello"
# 1. Checking type using isinstance() (Recommended)
is_number = isinstance(value_int, int)
print(f"Is {value_int} an int? {is_number}")
# Checking against multiple possible types
is_num_or_str = isinstance(value_str, (int, float, str))
print(f"Is '{value_str}' int, float, or str? {is_num_or_str}")
# 2. Checking type using type() (For exact class matches)
print(f"Exact type of value_int: {type(value_int).__name__}")
print("Is value_int exactly an int?", type(value_int) is int)
# 3. Inheritance difference
class CustomList(list):
pass
my_list = CustomList([1, 2, 3])
print("\nInheritance testing:")
print("isinstance(my_list, list):", isinstance(my_list, list))
print("type(my_list) is list:", type(my_list) is list)Is 42 an int? True
Is 'hello' int, float, or str? True
Exact type of value_int: int
Is value_int exactly an int? True
Inheritance testing:
isinstance(my_list, list): True
type(my_list) is list: FalseImplementación paso a paso
- Utilice isinstance(variable, type_name) para la verificación de tipos general (conforme a la herencia).
- Pase una tupla de tipos como isinstance(variable, (int, float)) para compararla con varias clases.
- Utilice tipo(variable) es nombre_tipo solo cuando deba garantizar la coincidencia exacta de la clase, ignorando las subclases.
Preguntas frecuentes
¿Por qué se prefiere isinstance() a type()?
isinstance() admite la herencia de objetos y el polimorfismo. Si subclasifica un tipo integrado, isinstance() lo reconocerá correctamente como una instancia de la clase principal, mientras que type() se evaluará como False.
¿Cómo puedo comprobar si un objeto es invocable (como una función)?
Utilice la función callable() incorporada, que devuelve True si el objeto se puede invocar como una función.
Temas relacionados
Aprenda a crear una clase en Python. Domine el constructor __init__, los métodos de instancia, la palabra clave self y la creación de instancias de objetos.
Cómo manejar excepciones en PythonAprenda a manejar excepciones en Python usando los bloques try, except, else y finalmente. Escriba código Python libre de errores y resistente a fallos.
Recursos recomendados de Python
Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.
Sugerencias de tipo Python
Aprenda a escribir sugerencias de tipo en Python. Mejore la calidad del código, habilite el autocompletado y aproveche mypy para el análisis de código estático.
Hoja de trucos para conversiones de tipos de Python
Aprenda conversiones de tipos implícitas y explícitas en Python. Convierta entre cadenas, números enteros, flotantes, listas, conjuntos y diccionarios.
Python vs TypeScript: scripting dinámico vs web con seguridad de tipos
Compara Python y TypeScript. Obtenga información sobre sistemas de tipos estructurales, metadatos de decoradores, comprobaciones de compiladores, tiempos de ejecución web y herramientas para desarrolladores.