Введение в доступ к атрибутам в ООП в Python
У объекта можно перехватить чтение и запись атрибутов специальными методами с двойным подчеркиванием в имени. Python вызывает их сам, когда код обращается к свойству через точку.
Метод __getattr__ срабатывает, если
обычный поиск атрибута ничего не нашел.
Его удобно использовать, когда у объекта
«как будто» есть свойство, которого на
самом деле нет в памяти.
Давайте посмотрим на коротком примере.
Пусть у класса User есть имя и
фамилия, а обращение к full мы
обработаем в __getattr__:
class User:
def __getattr__(self, name):
if name == 'full':
return self.surn + ' ' + self.name
raise AttributeError(name)
Проверим:
user = User()
user.surn = 'john'
user.name = 'smit'
print(user.full) # выведет 'john smit'
Свойства surn и name хранятся
как обычно. Имя full в объект не
записывалось - его значение собрал метод
__getattr__.