@101-s

Как сократить написание для вызова метода класса в Python?

у меня может нубский и некорректный вопрос, но хочу сделать красивый вызов метода.
есть класс Логгер, логгирование происходит так: log_error.log("бла-бла-бла")
а хотелось бы так: log_error("бла-бла-бла")
и еще чтобы было можно делать настройки log_error.to_file = False
и прикручивать логгер так:
from logger import log_error

сам логгер:
import datetime, os


class Logger(object):

    def __init__(self):
        self.to_screen = False

        self.sql_log = ""
        self.format_str = "{0}: {1}"  # формат строки 0-дата, 1-сообщение
        self.format_date_time = '%d %B %Y %H:%M:%S'  # формат даты и времени для сообщений
        self.format_date = '%d %B %Y'  # формат имени файла, по дате для имени файла
        self.not_print_datetime = False
        self.file_name_log = ""

        self.to_file = False
        self.folder_log = ""

    def _write_to_file(self, file):
        try:
            f = open(file, "a")
            f.write(self.message + "\n")
            f.close()
        except:
            # создаем папку лог
            os.mkdir(self.folder_log)
            f = open(file, "a")
            f.write(self.message + "\n")
            f.close()

    def log(self, message):
        time_now = datetime.datetime.now().strftime(self.format_date_time)
        date_now = datetime.datetime.now().strftime(self.format_date)
        self.message = self.format_str.format(time_now, message)
        if self.not_print_datetime: self.message = message

        if self.to_screen:
            print(self.message)

        if self.to_file:
            self._write_to_file(self.folder_log + date_now + ".txt")

log_error = Logger()
log_error.to_screen = True
log_info.to_file = True
log_info.folder_log = "logs_error/"
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
а хотелось бы так: log_error("бла-бла-бла")

Нужно добавить одну строчку в класс
class Logger(object):
    __call__ = log


и прикручивать логгер так:
from logger import log_error

Нужно добавить одну строчку в модуль logger - log_error = Logger()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы