Как действует этот код?
class Setting:
def __getattribute__(self, prop):
out = super().__getattribute__(prop)
on_body = hasattr(super().__getattribute__('__class__'), prop)
return out() if callable(out) and not on_body else out
Задание было такое: вы находитесь в процессе создания нового фреймворка. Чтобы повысить гибкость, когда ваш пользователь присваивает значение атрибуту экземпляра, вы хотите дать им возможность вместо этого предоставить вызываемый объект без аргументов. При доступе к атрибуту должно быть возвращено либо назначенное значение (как обычно), либо результат вызова (если он определен как вызываемый).
Создайте класс с именем "Setting", который поддерживает шаблон «Необязательно вызываемый атрибут».
Ответы (1 шт):
Тут вроде всё понятно.
- Берём свойство
- Если оно
callable, но не класс - вызываем, иначе отдаём как есть.
Дело в том, что класс - он тоже callable (чтобы получить экземпляр класса нужно вызвать класс) и поэтому на класс нужно дополнительно проверять и отсеивать эти случаи.
В return тут использован тернарный оператор.