Позволяет определить поведение экземпляра пользовательского типа при попытке получения значения атрибута.
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__ .