/
sejeenn
/
python_basic
Обзор
Документация
Войти
/
sejeenn
/
python_basic
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Module29/03_format_logging/main.py
64 строки
2 KB
Eugene Vorontsov
Copy repo python basic
03 фев 2025, 20:23
03 фев 2025, 20:23
a8fce4a
Код
Авторство
О чём код?
import time from datetime import datetime from typing import Callable def timer(cls, func: Callable, date_format: str) -> Callable: def wrapped(*args, **kwargs): size = date_format for symbol in size: if symbol.isalpha(): size = size.replace(symbol, '%' + symbol) print(f"- Запускается '{cls.__name__}.{func.__name__}'. Дата и время запуска:" f" {datetime.now().strftime(size)}") start = time.time() result = func(*args, **kwargs) end = time.time() print(f"- Завершение '{cls.__name__}.{func.__name__}', время работы: {round(end - start, 3)} сек.") return result return wrapped def log_methods(date_format: str): """Декоратор, принимающий формат даты и времени""" def decorate(cls): for method in dir(cls): if not method.startswith('__'): current_method = getattr(cls, method) decorated_method = timer(cls, current_method, date_format) setattr(cls, method, decorated_method) return cls return decorate @log_methods("b d Y - H:M:S") class A: def test_sum_1(self) -> int: print('Тут метод test_sum_1') number = 100 result = 0 for _ in range(number + 1): result += sum([i_num ** 2 for i_num in range(10000)]) return result @log_methods("b d Y - H:M:S") class B(A): def test_sum_1(self): super().test_sum_1() print("Тут метод test_sum_1 у наследника") def test_sum_2(self): print("Тут метод test_sum_2 у наследника") number = 200 result = 0 for _ in range(number + 1): result += sum([i_num ** 2 for i_num in range(10000)]) return result my_obj = B() my_obj.test_sum_1() my_obj.test_sum_2()