Чтение несуществующего свойства в ООП в Python
Метод __getattr__ удобен для отлавливания
обращений к несуществующим свойствам.
Он не подменяет уже созданные атрибуты -
срабатывает только когда имя не найдено.
Посмотрим на практическом примере. Пусть
у нас есть класс User с именем и
фамилией, являющимися публичными
свойствами:
class User:
pass
Давайте сделаем так, чтобы объект класса
вел себя так, будто у него также есть свойство
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'
Сделайте класс Date с публичными свойствами
year, month и day.
С помощью метода __getattr__ сделайте свойство week_day,
которое будет возвращать день недели, соответствующий
дате.