Позволяет определить поведение экземпляра пользовательского типа при попытке получения значения атрибута.
object.__getattr__(self, name)
self -- Ссылка на экземпляр.

name -- Имя атрибута, значение которого требуется получить.

Вызывается в случае, когда значение атрибута не удалось получить обычным способом (не определён ни для экземпляра, ни в иерархии типов данного экземпляра).

Метод должен возвращать значение (возможно вычисляемое) для атрибута, либо генерировать исключение AttributeError.

    class A(object): 

def __getattr__(self, name):
return 'my_%s_val' % name


a = A()
a.attr # my_attr_val
a.another # my_another_val

Внимание
Метод не вызывается, если значение удалось получить обычным способом (см. выше). Это намеренное отличие от object.__setattr__, обусловленное как соображениями производительности, так и тем, что иначе метод не имел бы доступа к прочим атрибутам экземпляра.

Симулировать полный контроль доступа к переменным экземпляра, можно путём их вставки не в словарь его атрибутов, а в некий другой контейнер.

Для классов нового стиля контроль доступа может осуществляться при помощи object.__getattribute__ .
Синонимы поиска: object.__getattr__, object, __getattr__
На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.