C贸mo determinar el tipo de un objeto en Python

Rate this post
How to Determine the Type of an Object in Python?

Planteamiento del problema

Cada objeto de Python es de un cierto tipo, tambi茅n llamado “clase”. La clase es un esquema que muestra los datos y capacidades de cada objeto/instancia que se crea a partir de este esquema.

Dado un objeto de Python (=instancia). 驴C贸mo determinar/comprobar/obtener su tipo (=clase)?

Hay muchas variantes de esta pregunta:

  • C贸mo determinar el tipo de un objeto
  • C贸mo comprobar el tipo de una instancia
  • C贸mo obtener la clase de un objeto
  • C贸mo comprobar la clase de una instancia

Empecemos con un breve resumen de c贸mo puedes responder a todas ellas de la forma m谩s pit贸nica.

Descripci贸n general de la soluci贸n

En Python, las funciones integradas type() e isinstance() te ayudan a determinar el tipo de un objeto.

  • type(objeto) 鈥 Devuelve una representaci贸n de cadena del tipo del objeto.
  • isinstance(objeto, clase) – Devuelve un booleano True si el objeto es una instancia de la clase, y False en caso contrario.

Aqu铆 hay dos ejemplos para comprobar si un objeto es una lista:

>>> type([1, 2, 3])
<class 'list'>
>>> isinstance([1, 2, 3], list)
True

Usar铆as type() para determinar el tipo exacto de un objeto. Utilizar铆as isinstance() para confirmar tus conjeturas sobre el tipo de un objeto. La funci贸n isinstance() es m谩s robusta en el sentido de que no depende de peque帽as diferencias de cadena, y tambi茅n funciona con la herencia de tipos. Por ejemplo, si A hereda de B que hereda de C, un objeto de tipo C es tambi茅n una instancia de A.


ejemplos de type() con un argumento de objeto:

>>> type([1, 2, 3]) is list
True
>>> type({1, 2, 3}) is set
True
>>> type('123') is str
True
>>> type(0) is int
True

type() con objetos personalizados:

>>> class Animal:
    pass

>>> class Snake(Animal):
    pass

>>> a = Animal()
>>> b = Snake()
>>> type(a) is Animal
True
>>> type(b) is Snake
True
>>> type(b) is Animal
False

El tercer ejemplo type(b) is Animal nos lleva a la siguiente conclusi贸n:

馃挕 Idea: type() devuelve s贸lo el tipo inmediato de un objeto, pero no funciona con herencia.

Si quieres superar esta limitaci贸n, debes utilizar la funci贸n isinstance(), que tambi茅n funciona para los tipos heredados:

>>> isinstance(Snake(), Animal)
True

Tambi茅n puedes usarlo en objetos y tipos integrados, como listas, tuplas, conjuntos y diccionarios:

>>> isinstance([1, 2, 3], list)
True
>>> isinstance((1, 2, 3), tuple)
True
>>> isinstance({1: 'a', 2: 'b'}, dict)
True
>>> isinstance({1, 2, 3}, set)
True

El 煤nico caso de uso en el que preferir铆as type() a isinstance() es si realmente necesitas la representaci贸n de cadena del tipo de un objeto. De lo contrario, isinstance() es una funci贸n m谩s flexible y expresiva.

type() vs isinstance()

La diferencia entre type() e isinstance() es el valor devuelto que es una representaci贸n de cadena para el primero y un valor booleano para el segundo. Usar铆as la funci贸n type() si no supieras nada. Si ya sospechas que un objeto es de un tipo determinado (=clase), puedes confirmar tu suposici贸n utilizando la funci贸n isinstance().

Funci贸n de Python type()

La funci贸n integrada type() de Python tiene dos prop贸sitos. Primero, puede pasar un objeto como un argumento para comprobar el tipo de este objeto. En segundo lugar, puede pasar tres argumentos (nombre, bases y dict) para crear un nuevo objeto de tipo que se puede usar para crear instancias de este nuevo tipo.

A continuaci贸n se muestra c贸mo usar la funci贸n type() con un argumento para comprobar el tipo de un objeto determinado:

>>> type(42)
<class 'int'>
>>> type('Finxter')
<class 'str'>

Sintaxis:

type(objeto)         # Devuelve la representaci贸n de la clase del objeto
ArgumentosobjectObjeto del que se comprueba el tipo.
Valor de retornostringDevuelve la representaci贸n de cadena de la clase del objeto.

Tutorial relacionado: Funci贸n de Python type()

Funci贸n isinstance() de Python

La funci贸n isinstance(objeto, clase) incorporada de Python toma un objeto y una clase como argumentos de entrada. Devuelve True si el objeto es una instancia de la clase. De lo contrario, devuelve False. En lugar de una clase, tambi茅n puedes pasar una tupla de clases para comprobar si el objeto es una instancia de cualquiera de las clases en la tupla, como en isinstance(objeto, (clase_A, clase_B, ...)).

隆Aprende con el ejemplo! Aqu铆 tienes un ejemplo sobre c贸mo usar la funci贸n incorporada isinstance().

>>> isinstance(42, int)
True
>>> isinstance(42, (float, list, int))
True
>>> isinstance('42', (float, list, int))
False

Sintaxis:

isinstance(objeto, clase)         # Comprueba si el objeto es una instancia de clase
isinstance(objeto, (clase_A, clase_B, ...)) # Comprueba si el objeto es una instancia de cualquiera de las clases en la tupla
ArgumentosobjectObjeto del cual se debe comprobar la pertenencia a la clase.
clase o tupla de clasesClase o tupla de clases a las que este objeto puede o no pertenecer.
Valor de retornobooleanoDevuelve si el objeto pertenece a la clase (o a las clases) o no.