Tutoriais

Como Verificar se um Objeto Possui um Atributo em Python

Juliano Faccioni 17 mar Intermediário 5xp
Compartilhar

Ao trabalhar com objetos em Python, é comum precisar determinar se um objeto possui um atributo específico antes de tentar usá-lo. Isso pode ajudar a prevenir erros de execução e tornar seu código mais robusto. Neste post, vamos explorar como verificar a presença de um atributo em um objeto Python.

Usando hasattr() para checar se o atributo existe

A função hasattr() é uma maneira direta de verificar se um objeto tem um atributo específico:

class AlgumaClasse:
    pass

a = AlgumaClasse()

if hasattr(a, 'propriedade'):
    print(a.propriedade)
else:
    print("Atributo 'propriedade' não existe.")

Neste exemplo, hasattr(a, 'propriedade') retorna False porque a instância AlgumaClasse a não possui um atributo chamado propriedade.

Abordagem Pythônica: EAFP vs. LBYL

Em Python, existe uma prática comum conhecida como “É mais fácil pedir perdão do que permissão” (EAFP, sigla derivada da expressão em inglês it’s easier to ask forgiveness than to get permission). Esse estilo de programação prefere tratar os erros com blocos try/except, ao invés de verificar condições de antemão. Na prática, isso significa que presumimos que o objeto tenha o atributo e, caso negativo, lidamos com o erro.

Isso contrasta com a abordagem “Olhe antes de pular” (look before you leap, ou LBYL), que envolve verificar condições antes de realizar uma ação utilizando diversos testes if.

Aqui está um exemplo de EAFP:

try:
    print(a.propriedade)
except AttributeError:
    print("Atributo 'propriedade' não existe.")

Essa abordagem é frequentemente mais rápida do que usar hasattr() quando se espera que o atributo exista na maioria das vezes. Também é considerada uma maneira mais “Pythônica” de estruturar seu código.

Para fins de comparação, a abordagem LBYL equivalente seria:

if not hasattr(a, "propriedade"):
    print("Atributo 'propriedade' não existe.")
else:
    print(a.propriedade)
Testar

Função getattr() para utilizar valores padrão

Se o seu objetivo é recuperar o valor de um atributo ou um valor padrão caso o atributo não esteja presente, getattr() é a melhor opção:

valor_padrao = 'valor padrão'
valor_propriedade = getattr(a, 'propriedade', valor_padrao)
print(valor_propriedade)

Neste caso, getattr(a, 'propriedade', 'valor padrão') retornará 'valor padrão' porque a não possui o atributo propriedade.

Resumo

Para verificar se um objeto possui um atributo em Python, você pode usar a função hasattr(). Dito isso, a maneira mais “Pythônica” é a abordagem EAFP, onde você simplesmente tenta acessar o atributo e lida com o AttributeError (caso ele não exista) com um bloco try/except.

Para casos em que você precisa de um valor padrão, getattr() é a escolha mais eficiente. Ao entender esses métodos, você pode escrever um código mais eficaz e Pythônico, que lida com atributos de objetos de maneira elegante.

Cursos gratuitos para continuar aprendendo

Curso
Grátis · 2h 13min

Python para iniciantes: do zero ao primeiro projeto

Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!

Curso
Grátis · 3h 47min

Python para dados: do zero à análise completa

Saia do zero e analise dados com Python e Pandas neste curso gratuito com certificado!

Analista de Dados
Curso
Grátis · 4h 11min

Python para IA: do zero ao primeiro chatbot

Aprenda a programar com Python e explore a inteligência artificial! Crie um chatbot prático que interage com seus próprios dados. Comece agora!

Ver todos os cursos

0 comentários

Exclusivo PRO
Faça parte da discussão

Comente e participe da conversa

Crie sua conta gratuita e compartilhe sua opinião nos comentários.

Entre para a Asimov