Usamos la función type() en Python para identificar el tipo de un específico objeto Python. Es una función muy sencilla y fácil de entender. Sin más preámbulos, vamos directamente a la sintaxis.
Sintaxis de la función type() de Python
Python tiene muchas funciones incorporadas. La función type()
se utiliza para obtener el tipo de un objeto.
La sintaxis de la función type() de Python es:
type(object)
type(name, bases, dict)
Cuando se pasa un solo argumento a la función type(), devuelve el tipo del objeto. Su valor es el mismo que el de la variable de instancia object.__class__.
Cuando se pasan tres argumentos, devuelve un nuevo objeto de tipo. Se utiliza para crear una clase dinámicamente sobre la marcha.
- La cadena “name” se convierte en el nombre de la clase. Es lo mismo que el atributo __name__ de una clase.
- La tupla “bases” especifica las clases base. Es lo mismo que el atributo __bases__ de la clase.
- El diccionario “dict” ayuda a crear el cuerpo de la clase. Es lo mismo que el atributo __dict__ de la clase.
Ejemplos de la función type() en Python
Vamos a ver algunos ejemplos de cómo usar la función type().
1. Encontrar el tipo de un objeto de Python
x = 10
print(type(x))
s = 'abc'
print(type(s))
from collections import OrderedDict
od = OrderedDict()
print(type(od))
class Data:
pass
d = Data()
print(type(d))
Salida:
<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>
Observa que la función type() devuelve el tipo del objeto con el nombre del módulo. Dado que nuestro script de Python no tiene un módulo, su módulo se convierte en __main__.
2. Extracción de detalles de las clases de Python
Supongamos que tenemos las siguientes clases. Vamos a extraer metadatos sobre las clases usando las propiedades class, bases, dict y doc.
class Data:
"""Data Class"""
d_id = 10
class SubData(Data):
"""SubData Class"""
sd_id = 20
Vamos a imprimir algunas de las propiedades de estas clases.
print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)
print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)
Salida:
<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class
<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class
Podemos crear clases similares usando la función type().
Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})
print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)
print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)
Salida:
<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class
<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class
Ten en cuenta que no podemos crear funciones en la clase dinámica usando la función type().
Uso en la Vida Real de la función type()
Python es un lenguaje de tipo dinámico. Entonces, si queremos conocer el tipo de los argumentos, podemos usar la función type(). Si deseas asegurarte de que tu función funcione solo en tipos específicos de objetos, usa la función isinstance().
Digamos que queremos crear una función para calcular algo con dos enteros. Podemos implementarlo de la siguiente manera.
def calculate(x, y, op='sum'):
if not(isinstance(x, int) and isinstance(y, int)):
print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
raise TypeError('Incompatible types of arguments, must be integers')
if op == 'difference':
return x - y
if op == 'multiply':
return x * y
# el valor predeterminado es la suma
return x + y
La función isinstance() se utiliza para validar el tipo de argumento de entrada. La función type() se utiliza para imprimir el tipo de los parámetros cuando falla la validación.
Referencias
Source:
https://www.digitalocean.com/community/tutorials/python-type