Форум сайта python.su
Вот мучил-мучил, как сделать нормально логирование, и намучил вот такое:
import logging class Logger(object): """ Class logger singleton """ def __new__(self): if not hasattr(self, '_logger'): self._logger = logging.getLogger('log checker') console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter('%(asctime)s: %(name)s - %(levelname)s: %(message)s')) self._logger.addHandler(console_handler) return self._logger
Офлайн
Во первых не `self`, а `cls`, зачем себя и людей обманывать. А во вторых:
logger = None def Logger(): global logger if not logger: # ... return logger
Офлайн
Можно поподробней про self, cls и прочее? )
Офлайн
Можно поподробней про self, cls и прочее? )
Офлайн
Есть такая древняя традиция, иногда соблюдаемая в программировании: называть вещи своими именами. Как то, в народе принято именем “self” указывать на экземпляр класса к которому привязан соответствующий метод, а вот “cls” (или можно встретить “klass”) указывает на класс и используется в классовых методах так же как и “self” в обычных. И так как `__new__` является ни чем иным как классовым методом и первым аргументом он получает ну ни как не экземпляр класса, а сам класс (а вернуть должен экземпляр этого класса, если что), то и обозначать его стоит надлежащим образом. Хотя понятно, что это всё условности и в действительности хоть “shit” назови, Python всё стерпит.
..bw
Офлайн
Красиво сказано, но всё же вообще, моя схема вроде работает, или там есть какие-то затыки и сделать надо по другому?
Офлайн
Master_Sergius, работать-то оно может и работает, но это плохой подход.
Код пишется в первую очередь для людей. В вашем случае он неоправданно усложнен.
Просто используйте функцию, как посоветовал вам bw в сообщении #2.
Офлайн