Задача 1. Права доступа
На вас возложили задачу по созданию и поддержке специализированного сайта-форума. Вы только начали выполнять задачу и сейчас остановились на реализации действий, которые могут совершать посетители форума. И конечно же, для разных пользователей прописаны разные возможности.
Напишите декоратор check_permission, который проверяет, есть ли у пользователя доступ к вызываемой функции, и если нет, то выдаёт исключение PermissionError.
Задача 2. Функция обратного вызова
При работе с сетью и веб-сервисами иногда используется функция callback, так называемая функция обратного вызова. Это функция, которая вызывается при срабатывании определённого события (переходе на страницу, получении сообщения или окончании обработки процессором). В неё можно передать функцию, чтобы она выполнилась после определённого события. Это используется, например, в HTTP-серверах в ответ на URL-запросы. Реализуйте такую функцию.
Задача 3. Логирование в формате
Реализуйте декоратор, который будет логировать все методы декорируемого класса (кроме магических методов) и в который можно передавать формат вывода даты и времени логирования.
Задача 4. Весь мир — декоратор…
Реализуйте декоратор для декораторов: он должен декорировать другую функцию, которая должна быть декоратором, и даёт возможность любому декоратору принимать произвольные аргументы.
Задача 5. Синглтон
Синглтон — это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Синглтонами мы уже пользовались, к ним относятся, например, None, True и False. Именно потому, что None является синглтоном, мы можем использовать оператор is — он возвращает True только для объектов, представляющих одну и ту же сущность.
Реализуйте декоратор singleton, который превращает класс в одноэлементный. То есть при множественной инициализации объекта этого класса будет сохранён только первый инстанс, а все остальные попытки создания будут возвращать первый экземпляр.
Задача 6. Класс-декоратор
Вы работаете в компании, которая разрабатывает программное обеспечение для финансовых анализов. Одна из ключевых задач в вашей работе — реализация сложного алгоритма для прогнозирования финансовых показателей. Этот алгоритм требует множества вычислений и может занимать длительное время. Вам поставлена задача создать декоратор, который будет логировать аргументы, результаты и время выполнения этой функции. Это поможет отслеживать прогресс выполнения алгоритма и анализировать его производительность.
Задача
Создайте декоратор, который логирует аргументы, результаты и время выполнения функции. Реализуйте декоратор как класс и примените его к функции complex_algorithm. Запустите задекорированную функцию и проверьте время её выполнения.