Como Verificar se um Objeto Possui um Atributo em Python

Juliano Faccioni
4 minutos de leitura

Conteúdos do tutorial

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.

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:
Conteúdos do tutorial