Python / type() / Comprobar el tipo de un valor
En Python, type(value) devuelve el objeto de tipo real de un valor, no una cadena como "int". Para comprobar el tipo exacto, use type(value) is int. Para verificaciones habituales que aceptan subclases, use isinstance().
Uso básico y objeto devuelto
Con un argumento, type() devuelve el tipo de ese objeto. Los tipos también son objetos, como números, cadenas y colecciones. El intérprete interactivo muestra resultados de expresiones; un script necesita print() u otro mecanismo de salida.
Los ejemplos funcionan con Python 3.12. Guarde cada código completo en UTF-8 como type_example.py y ejecute python type_example.py, o python3 según su instalación. Cambie el contenido para probar cada ejemplo por separado.
values = (123, 12.3, "abc", [1, 2], (1, 2), {"a": 1}, {1, 2}, 1 + 2j, True, None)
for value in values:
print(type(value))
Resultado esperado:
<class 'int'>
<class 'float'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'dict'>
<class 'set'>
<class 'complex'>
<class 'bool'>
<class 'NoneType'>
<class 'int'> es la representación del objeto de tipo entero. Compararlo con una cadena no comprueba el tipo. __name__ proporciona una etiqueta legible, pero clases distintas pueden compartir nombre: compare objetos de tipo para tomar decisiones.
kind = type(123)
print(kind is int)
print(kind == "int")
print(kind.__name__)
True
False
int
La forma de tres argumentos type(name, bases, dict) crea una clase nueva. Distinga ese propósito de la inspección con un argumento.
Tipo exacto frente a isinstance()
type(value) is T exige exactamente T. isinstance(value, T) acepta también subclases, lo que resulta útil con herencia. El ejemplo completo define Dog como subclase de Animal y compara tipos numéricos.
class Animal:
pass
class Dog(Animal):
pass
pet = Dog()
print(type(pet).__name__)
print(type(pet) is Animal)
print(isinstance(pet, Animal))
print(type(True) is int)
print(isinstance(True, int))
print(isinstance(3, (int, float)))
Dog
False
True
False
True
True
El tipo real de un Dog es Dog, pero es una instancia de Animal. Además, bool es una subclase de int, por lo que isinstance(True, int) es verdadero. Si una cantidad debe rechazar booleanos, exija int exacto o excluya bool por separado. Una tupla de tipos permite varias alternativas.
Reasignar una variable a otro tipo
Al estudiar los objetos y tipos de Python, distinga el nombre del objeto al que hace referencia. Asignar una cadena al mismo nombre no transforma el anterior objeto entero en cadena.
value = 123
original = value
print(type(value).__name__)
value = "123"
print(type(value).__name__)
print(type(original).__name__)
int
str
int
Al principio ambos nombres apuntan al mismo entero. Después de value = "123", value apunta a una cadena y original conserva el entero. Esta nueva vinculación difiere de convertir un valor con int() o str().
Tipo del contenedor, contenido y anotaciones
type(values) no comprueba todos los elementos de una lista. Una anotación de tipo como list[int] no obliga a Python a validar o convertirlos automáticamente durante la ejecución.
values: list[int] = [1, "2"]
print(type(values).__name__)
print(all(type(item) is int for item in values))
try:
print(isinstance(values, list[int]))
except TypeError:
print("TypeError")
list
False
TypeError
La lista puede contener la cadena "2" pese a su anotación int. La comprobación exacta por elemento da falso. Pasar list[int] como segundo argumento de isinstance() genera TypeError. Separe la comprobación del contenedor de su esquema interno y aproveche también las advertencias de un comprobador estático.
Comprobar None y las condiciones del valor
None es un objeto distinto que representa ausencia; value is None lo comprueba claramente. Un tipo correcto no garantiza un valor válido para la aplicación. Esta función acepta enteros exactos no negativos y excluye bool.
value = None
print(value is None)
print(type(value).__name__)
def valid_count(value):
return type(value) is int and value >= 0
for value in (3, -1, True, "3", None):
print(repr(value), valid_count(value))
True
NoneType
3 True
-1 False
True False
'3' False
None False
and omite la comparación si el tipo es incorrecto, evitando >= 0 en cadenas o None. En cambio, -1 es entero pero falla por su valor. Decida entre convertir la entrada o limitar tipos y añada rango, ausencia y requisitos de formato.




