Python · Avançado · Inglês · Técnico
dunder getattr
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) # 80Exemplos
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