Python: Como acessar os atributos de objeto da mesma forma como em um dicionário.
Se você já trabalhou com dicionários em python, provavelmente já acessou seus atributos através de strings entre colchetes. Por exemplo:
t = { 'a' : 5 }
t['a']
Isso resulta na saída abaixo.
Ou seja, sem problemas, com dict nós conseguimos acessar um atributo através dos colchetes, passando o nome do atributo como string, assim: t['a']
Mas esta forma de acesso não funciona para objetos ou seja, instancias de classes. Veja o exemplo abaixo:
class Teste:
a = 5
t['a']
Nós conseguimos acessar o atributo a
através do ponto t.a
, mas não conseguimos através dos colchetes t['a']
. Acontece o erro object is not subscriptable
, como podemos ver na imagem abaixo.
Isso implica que não conseguimos acessar um atributo de um object dinamicamente utilizando colchetes. Mas tem solução!
Como acessar atributos de um objeto através de strings
Se tivermos uma string com o nome do atributo do objeto, conseguimos acessar esse atributo através da função getattr
nativa do python.
Essa função tem o mesmo efeito que os colchetes nos dicionários.
O exemplo abaixo mostra como utilizar a getattr
.
class Teste:
a = 5
getattr(t, 'a')
Veja este exemplo funcionando na prática.
Como alterar atributos de um objeto através de strings
Também conseguimos alterar o valor do atributo, mas aí precisamos usar a função setattr
, passando o novo valor do atributo como terceiro parâmetro. Assim:
class Teste:
a = 5
setattr(t, 'a', 6)
Veja este exemplo funcionando na prática.
E aí, gostou da dica? Se tiver alguma dúvida poste aí nos comentários!