Задача: Декораторы. Фабрика декораторов
Описание
В этом задании требуется написать фабрику декораторов, которые будут логировать вызовы функций. Чтобы не усложнять, в качестве журнала событий будем использовать списки. Требования к фабрике:
'name': 'test_function',
'arguments': {'a': 1, 'b': 2},
'call_time': datetime.datetime(2021, 8, 1, 18, 18, 7, 849184),
'result': 127
}
Ниже приведен пример использования такого декоратора.
@logging_decorator(logger) # в аргументы фабрики декораторов подается логгер
def test_simple(a, b=2):
return 127
test_simple(1) # при вызове функции в список logger должен добавиться словарь с
# информацией о вызове функции
print(logger)
[{'name': 'test_simple', 'arguments': {'a': 1, 'b': 2}, 'call_time': datetime.datetime(2021, 8, 1, 18, 18, 7, 849184), 'result': 127}]
- фабрика должна называться
logging_decorator - при создании декоратора фабрика должна принять требуемый список-логгер в аргументах
- обернутая функция должна возвращать тот же результат, который бы вернула оборачиваемая функция
- при вызове обернутой функции в список-логгер должен добавляться словарь, в котором будут храниться название функции, список поданных аргументов, время вызова функции и результат, который она вернула. Формат словаря должен быть таким:
'name': 'test_function',
'arguments': {'a': 1, 'b': 2},
'call_time': datetime.datetime(2021, 8, 1, 18, 18, 7, 849184),
'result': 127
}
Ниже приведен пример использования такого декоратора.
Пример использования декоратора
logger = [] # этот словарь будет хранить наш "лог"@logging_decorator(logger) # в аргументы фабрики декораторов подается логгер
def test_simple(a, b=2):
return 127
test_simple(1) # при вызове функции в список logger должен добавиться словарь с
# информацией о вызове функции
print(logger)
[{'name': 'test_simple', 'arguments': {'a': 1, 'b': 2}, 'call_time': datetime.datetime(2021, 8, 1, 18, 18, 7, 849184), 'result': 127}]
Примечания
Для удобного получения переданных в функцию аргументов при ее вызове можно использовать функциюgetcallargs из модуля inspect. Но стоит учесть, что она так или иначе выполняет вызов исследуемой функции, поэтому такой способ плох, если функция изменяет какие-то глобальные состояния. В тестах к этому заданию таких функций нет, поэтому можно попрактиковаться в использовании модуля inspect.Характеристики решённой задачи
Предмет
Учебное заведение
Учебная пора
Программы
Просмотров
1
Качество
Идеальное компьютерное
Размер
587 b
Список файлов
7.2 Pro.txt

Vladelo
Комментарии
Нет комментариев
Стань первым, кто что-нибудь напишет!
Отзывы на другие работы автора
Вся теория для экзамена "Интегралы и ДУ" с доказательствами
не вся теория, некоторые ответы на вопросы норм, а некоторые не оч
Разбор всех билетов РК "Общие теоремы динамики"
Такие файлы есть и это радует
Билеты РК1 для СМ и РК4
Билеты совпали, очень помогло
Вся теория для экзамена по кратным интегралам, теории поля и рядам
Все сошлось, только номера разные
Пределы и непрерывность функций
я хотел бы выразить благодарность этому владело. не раз натыкаюсь на его файлы и ни раз он спасает меня. спасибо тебе за то что ты делаешь!!
МГТУ им. Н.Э.Баумана
vladelo

















