A Maneira Canônica de Verificar o Tipo em Python

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

Ao trabalhar com Python, você pode se encontrar na necessidade de verificar o tipo de um objeto. Essa é uma tarefa comum, seja para checar os tipos de entrada ou para garantir que os dados com os quais você está trabalhando correspondem ao formato esperado. Neste artigo, vamos explorar como verificar se um objeto é de um determinado tipo, como uma string, ou se ele herda de um determinado tipo.

Verificando o Tipo de um Objeto

Para determinar se um objeto o é uma instância de um tipo específico, como uma string (str), você pode usar a função isinstance(). Essa função verifica se o é uma instância de str ou de qualquer subclasse de str. Veja como você pode usá-la:

if isinstance(o, str):
    print("o é uma string!")

Essa abordagem é direta e é a maneira recomendada de verificar a herança de tipos em Python.

Verificando o Tipo Exato

Às vezes, você pode querer verificar se o tipo de um objeto é exatamente str, excluindo quaisquer subclasses. Nesse caso, você pode comparar o tipo diretamente usando a função type():

if type(o) is str:
    print("o é exatamente uma string, não uma subclasse de string.")

Este método é menos comum porque não leva em conta a herança, que é um recurso poderoso da programação orientada a objetos.

Considerações Especiais para Python 2

Se você está trabalhando com Python 2, precisará usar basestring para verificar se um objeto o é uma string, pois isso também incluirá strings Unicode:

if isinstance(o, basestring):
    print("o é algum tipo de string no Python 2.")

No Python 2, str e unicode são ambas subclasses de basestring. No entanto, no Python 3, basestring não existe mais, e há uma distinção clara entre strings (str) e dados binários (bytes).

Adotando a Filosofia de Duck Typing do Python

Embora verificar os tipos possa ser útil, é importante lembrar que Python é uma linguagem que adota o “Duck Typing”. Isso significa que, em vez de verificar um tipo específico, você deve tentar usar os métodos do objeto diretamente. Se o objeto se comportar conforme o esperado, então ele é o “tipo” de que você precisa.

Por exemplo, se você precisa de um objeto de arquivo que seja gravável, não verifique se ele é uma subclasse de file. Em vez disso, apenas tente usar seu método .write() e lide com quaisquer exceções que possam surgir:

try:
    o.write("Olá, mundo!")
except AttributeError:
    print("o não é um objeto de arquivo gravável.")

Essa abordagem é mais de acordo com o estilo Python e mantém seu código flexível e idiomático.

Resumo

Em resumo, para verificar se um objeto é de um determinado tipo ou herda de um determinado tipo em Python, use a função isinstance(). Para verificar um tipo exato, use type() com cautela. Lembre-se de que no Python 2, você deve usar basestring para verificar strings. No entanto, sempre considere a filosofia de Duck Typing do Python e tente usar os métodos de um objeto diretamente quando possível, lidando com quaisquer exceções que possam ocorrer. Essa abordagem está alinhada com a natureza flexível e dinâmica do Python, permitindo que seu código seja mais adaptável e robusto.

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: