Найти - Пользователи
Полная версия: получение имени класса и мотода внутри этого же метода
Начало » Python для новичков » получение имени класса и мотода внутри этого же метода
1
metotron
Привет!
Хотел бы узнать можно ли получить имя класса и метода изнутри него самого? Не вбивая их ручками конечно
Пример
class TestCalss:
def test_method(self):
class_name = имя класса
def_name = имя метода

Спасибо
FishHook
  self.__class__.__name__
doza_and
 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()

И что оно должно напечатать Ta или Tb? А как функция определит свое имя? У нее их два f, g и в любой момент может появиться сколько хочешь а может и вообще ни одного не быть. Можно inspect ом (https://docs.python.org/3/library/inspect.html) посмотреть какая текущая функция и найти ее в словаре от текущего класса. Но ой не уверен что это вам надо. Может то что вы ищете называется декораторы?
metotron
ну на самом деле идея была сделать логгер который бы выдавал лог с указанием класса и метода в котором его вызвали. Что то типа
ERROR - 2016-10-23 11:20:07,986 - Имя класса - имя метода - Error - Текст ошибки
Возможно есть более правильные вариант…буду рад за подсказку
doza_and
metotron
буду рад за подсказку
Будете смеяться но стандартный модуль logging это позволяет.

http://stackoverflow.com/questions/10973362/python-logging-function-name-file-name-line-number-using-a-single-file
metotron
у меня не получается сделать так “по дефолту”
вот код класса который я хочу вызывать а других местах для логгирования. Но я хочу 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)
Shaman
Посмотрите про модули inspect, как предлагали выше, и на всякий случай про traceback.
doza_and
metotron
у меня не получается
Вы ссылочку то посмотрите там logging и inspect вместе используются
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB