У меня есть замечательная маленькая функция, которая выглядит так:
def verbose_print(message, *args, **kwargs):
"""Prints `message` with a helpful prefix when in verbose mode
Args:
message (str): The message to print. Can be a format string, e.g.
`A %s with some %s in it`
*args: Variables for the message format
**kwargs: Keyword variables for the message format
"""
# Only print when in verbose mode
if not config.verbose:
return
# Ready a prefix for the message
try:
s = inspect.stack()
module_name = inspect.getmodule(s[1][0]).__name__
func_name = s[1][3]
prefix = '### %s->%s' % (module_name, func_name)
except Exception as e:
prefix = '### [stack unavailable]'
if args:
message = message % args
elif kwargs:
message = message % kwargs
print '%s: %s' % (prefix, message)
Суть функции в том, что я могу вызвать ее из любого места с сообщением, и если мой файл конфигурации проекта установлен в подробный режим, все сообщения будут напечатаны с полезным префиксом, чтобы показать, где она была вызвана. Вот пример вывода:
### avesta.webserver->check_login: Checking login for client at 127.0.0.1 ### avesta.webserver->check_login: Found credentials cookie with username: tomas, token: blablabla ### avesta.webserver->check_login: Login valid, refreshing session ### avesta.webserver->get_flash_memory: Fetched flash data: None ### avesta.webserver->get: Fetched data from empty path ('previous_values', 'name'), returning '' ### avesta.webserver->get: Fetched data from empty path ('previous_values', 'description'), returning '' ### avesta.webserver->get: Fetched data from empty path ('validation_errors', 'name'), returning ''
Формат: "###модуль ->функция :сообщение" .
В большинстве случаев это действительно полезно, но не идеально. В приведенном выше примере функция «get» на самом деле является связанным методом класса, но это не видно. Что я пытаюсь сделать, так это то, что когда функция является связанным методом, я вместо этого печатаю в этом формате:
"###модуль ->ИмяКласса.функция"
Но проблема в том:
Спасибо за любые ответы, которые могут помочь мне понять это.