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.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários