Função type() do Python [Com Exemplos Simples]

Usamos a função type() em Python para identificar o tipo de um específico objeto Python. É uma função muito simples e fácil de entender. Sem mais delongas, vamos direto à sintaxe.

Sintaxe da função type() do Python

O Python tem muitas funções integradas. A função type() é usada para obter o tipo de um objeto.

A sintaxe da função type() do Python é:

type(object)

type(name, bases, dict)

Quando um único argumento é passado para a função type(), ela retorna o tipo do objeto. Seu valor é o mesmo que a variável de instância do objeto.__class__.

Quando três argumentos são passados, ela retorna um novo objeto de tipo. É usado para criar uma classe dinamicamente no momento.

  • O “nome” string se torna o nome da classe. É o mesmo que o atributo __name__ de uma classe.
  • O “bases” tupla especifica as classes base. É o mesmo que o atributo __bases__ da classe.
  • O “dict” dicionário ajuda a criar o corpo da classe. É o mesmo que o atributo __dict__ da classe.

Exemplos da função type() em Python

Vamos explorar alguns exemplos de uso da função type().

1. Encontrando o tipo de um objeto 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))

Saída:

<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>

Observe que a função type() retorna o tipo do objeto com o nome do módulo. Como nosso script Python não possui um módulo, seu módulo torna-se __main__.

2. Extraindo Detalhes de Classes Python

Vamos supor que temos as seguintes classes. Vamos extrair metadados sobre as classes usando as propriedades class, bases, dict e doc.

class Data:
    """Data Class"""
    d_id = 10


class SubData(Data):
    """SubData Class"""
    sd_id = 20

Vamos imprimir algumas das propriedades dessas classes.

print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)

print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)

Saída:

<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 criar classes semelhantes usando a função 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__)

Saída:

<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

Observe que não podemos criar funções na classe dinâmica usando a função type().

Uso Real da Função type()

O Python é uma linguagem tipada dinamicamente. Portanto, se quisermos saber o tipo dos argumentos, podemos usar a função type(). Se você deseja garantir que sua função funcione apenas com tipos específicos de objetos, use a função isinstance().

Vamos supor que queremos criar uma função para calcular algo com dois inteiros. Podemos implementá-la da seguinte maneira.

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
    # o padrão é a soma
    return x + y

A função isinstance() é usada para validar o tipo do argumento de entrada. A função type() é usada para imprimir o tipo dos parâmetros quando a validação falha.

Referências

Source:
https://www.digitalocean.com/community/tutorials/python-type