ExpertiDict

Python · Avançado · Inglês · Técnico

dunder getattr

/ˈdʌndəɹ ˈɡɛtætɹ/substantivo

Método especial __getattr__, chamado só quando a busca normal de atributo falha. Permite atributos dinâmicos, proxies e delegação. Já o __getattribute__ intercepta todo acesso.

Onde usar

Aparece em wrappers de API, objetos de configuração e proxies. Em code review, o risco é recursão infinita ou mascarar erros de digitação com respostas padrão.

Em código

class Config:
  def __init__(self, d):
    self._d = d
  def __getattr__(self, nome):
    if nome in self._d:
      return self._d[nome]
    raise AttributeError(nome)
print(Config({'porta': 80}).porta)  # 80

Exemplos

The wrapper forwards unknown attributes through dunder getattr.

O wrapper repassa atributos desconhecidos pelo dunder getattr.

Raise AttributeError in dunder getattr, not KeyError.

Lance AttributeError no dunder getattr, não KeyError.

Cuidado

Não confunda com __getattribute__, chamado em todo acesso; usar self.x dentro dele sem cuidado causa recursão infinita.

Sinônimos

atributo dinâmico

Veja também

Todos os termos de Python