Como saber o tipo de um Objeto em Python

Luiza Pereira
5 minutos de leitura

Conteúdos do tutorial

Ao trabalhar com Python, você pode frequentemente se encontrar na necessidade de saber o tipo de um objeto. É uma lista, um dicionário ou talvez um objeto personalizado? Entender o tipo de um objeto é crucial para depuração e para garantir que seu código se comporte como esperado. Neste artigo, exploraremos maneiras simples de determinar o tipo de um objeto em Python.

código python no terminal demonstrando uma checagem de tipo

Usando a Função type()

A função type() é uma função embutida do Python que retorna o tipo de um objeto. Isso é útil quando você quer saber o tipo exato de um objeto. Veja como você pode usá-la:

# Verifica se um objeto é uma lista
print(type([]) is list)  # Saída: True

# Verifica se um objeto é um dicionário
print(type({}) is dict)  # Saída: True

# Verifica se um objeto é uma string
print(type('') is str)  # Saída: True

# Verifica se um objeto é um inteiro
print(type(0) is int)  # Saída: True
Testar

Este método também funciona com tipos personalizados:

class MinhaClassePersonalizada:
    pass

obj_personalizado = MinhaClassePersonalizada()
print(type(obj_personalizado) is MinhaClassePersonalizada)  # Saída: True
Testar

No entanto, é importante notar que type() não considera herança. Se você tem uma subclasse, type() não a reconhecerá como uma instância da classe pai.

Usando a Função isinstance()

A função isinstance() é outra função embutida que verifica se um objeto é uma instância de uma classe específica ou de uma subclasse dela. É mais robusta do que type() e suporta herança de tipos, tornando-a o método preferido para verificação de tipos em muitos casos.

Veja como você pode usar isinstance():

class ClassePai:
    pass

class ClasseFilha(ClassePai):
    pass

obj_filho = ClasseFilha()

# Verifica se um objeto é uma instância de uma classe ou de sua subclasse
print(isinstance(obj_filho, ClassePai))  # Saída: True
print(isinstance(obj_filho, ClasseFilha))   # Saída: True
Testar

isinstance() também pode verificar vários tipos de uma vez:

# Verifica se um objeto é uma instância de qualquer um dos tipos dados
print(isinstance([], (tuple, list, set)))  # Saída: True
Testar

Maneira Pythonica: Duck Typing com try...except

Em Python, existe um conceito conhecido como “duck typing”, que sugere que você não precisa saber o tipo de um objeto, mas sim quais operações ele suporta. Se um objeto se comporta como uma lista ou um dicionário, você pode tratá-lo como tal sem verificar explicitamente seu tipo.

Aqui está um exemplo de uso de duck typing com um bloco try...except:

def processar_dados(dados):
    try:
        dados.append(100)  # Tenta usar um método de lista
    except AttributeError:
        try:
            dados['chave'] = 100  # Tenta usar um método de dicionário
        except TypeError:
            print("dados não são nem lista nem dicionário")

minha_lista = []
processar_dados(minha_lista)  # Isso vai funcionar pois minha_lista suporta append()

meu_dicionario = {}
processar_dados(meu_dicionario)  # Isso vai funcionar pois meu_dicionario suporta atribuição de item
Testar

Usar try...except permite que seu código lide com objetos que “soam” como uma lista ou um dicionário, mesmo que eles não sejam estritamente desses tipos.

Resumo

Em resumo, para determinar o tipo de um objeto em Python, você pode usar a função type() para uma correspondência exata ou a função isinstance() para uma verificação de tipo mais flexível que inclui herança. No entanto, seguindo uma abordagem verdadeiramente pythonica, considere usar duck typing com blocos try...except para focar no que um objeto pode fazer em vez de no que ele é. Esta abordagem promove um código mais flexível e adaptável.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse: