Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 19, 2008 11:33:35

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть имя метода и содержащего его модуля из метода.

Здравствуйте.
Есть к примеру модуль module.py, в нем есть def request:, не знаю как правильно назвать это в терминологии Python метод наверное. В теле этого def request: нужно вытащить имя самого себя (метода) а также имя модуля. Я конечно знаю как они называются, просто это потребуется еще во многих местах, хотелось бы кодом, в C# что-то наподобие this.name.



Офлайн

#2 Сен. 19, 2008 12:02:40

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Вернуть имя метода и содержащего его модуля из метода.

import inspect


def request():
print inspect.getframeinfo(inspect.currentframe())

if __name__ == '__main__':
request()


('E:\\projects\\doctests_vs_unittests\\module.py', 5, 'request', [' print inspect.getframeinfo(inspect.currentframe())\n'], 0)



Офлайн

#3 Сен. 19, 2008 12:11:52

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть имя метода и содержащего его модуля из метода.

Спасибо.



Офлайн

#4 Сен. 19, 2008 12:12:59

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Вернуть имя метода и содержащего его модуля из метода.

timas
в C# что-то наподобие this.name.
Возможно, имеет смысл функциональность, завязанную на именах, вынести в декораторы:
def inspect_dec(func):
def new_func(*args, **kwargs):
'''do something with function's and module's names'''
print func.__name__
print func.__module__
return func(*args, **kwargs)
return new_func

@inspect_dec
def request():
print 'Hello'
Если имя функции и модуля нужны только для логгинга, то стандартный логгер уже умеет это делать -> см. logger.findCaller()



Отредактировано (Сен. 19, 2008 12:57:28)

Офлайн

#5 Сен. 19, 2008 13:07:10

timas
От:
Зарегистрирован: 2008-08-28
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Вернуть имя метода и содержащего его модуля из метода.

Спасибо, попозже попробую.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version