Форум сайта python.su
0
Привет!
Хотел бы узнать можно ли получить имя класса и метода изнутри него самого? Не вбивая их ручками конечно
Пример
class TestCalss:
def test_method(self):
class_name = имя класса
def_name = имя метода
Спасибо
Офлайн
568
self.__class__.__name__
Офлайн
253
class Ta: pass class Tb: pass def f(self): print(self, "qq") g=f; Ta.f = f Tb.f = f a = Ta() b = Tb() a.f() b.f()
Отредактировано doza_and (Окт. 23, 2016 20:13:03)
Офлайн
0
ну на самом деле идея была сделать логгер который бы выдавал лог с указанием класса и метода в котором его вызвали. Что то типа
ERROR - 2016-10-23 11:20:07,986 - Имя класса - имя метода - Error - Текст ошибки
Возможно есть более правильные вариант…буду рад за подсказку
Офлайн
253
metotronБудете смеяться но стандартный модуль logging это позволяет.
буду рад за подсказку
Офлайн
0
у меня не получается сделать так “по дефолту”
вот код класса который я хочу вызывать а других местах для логгирования. Но я хочу app_name не писать руками, а получать от __name__ например
class MyLogger:
def __init__(self, test_run, app_name):
self.test_run = test_run
self.app_name = app_name
def logger(self):
formatter = logging.Formatter('%(levelname)s - %(asctime)s - %(name)s - %(message)s')
fh = logging.FileHandler("info.log")
fh.setFormatter(formatter)
ch = logging.StreamHandler()
ch.setFormatter(formatter)
# add handler to logger object
logger = logging.getLogger(self.app_name)
logger.setLevel(logging.INFO)
logger.addHandler(fh)
logger.addHandler(ch)
return logger
def debug_log(self, msg):
self.logger().debug("Here's some debugging information about %s", msg)
def info_log(self, msg):
self.logger().info("Here's some info about %s", msg)
def error_log(self, msg):
self.logger().error(msg)
def critical_log(self, msg):
self.logger().critical(msg)
Офлайн
88
Посмотрите про модули inspect, как предлагали выше, и на всякий случай про traceback.
Офлайн
253
metotronВы ссылочку то посмотрите там logging и inspect вместе используются
у меня не получается
Офлайн