Я пытаюсь написать простой декоратор, который регистрирует задание перед вызовом декорированной функции. Записанные операторы должны отображаться как бы из той же функции, которая, как я думал, была целью functools.wraps().
Почему следующий код:
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(funcName)20s - %(message)s')
from functools import wraps
def log_and_call(statement):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
logging.info(statement)
return func(*args, **kwargs)
return wrapper
return decorator
@log_and_call("This should be logged by 'decorated_function'")
def decorated_function():
logging.info('I ran')
decorated_function()
приводят к операторам журналов, например:
wrapper - This should be logged by 'decorated_function'
decorated_function - I ran
Я думал, что вызов wraps переименует обертку с именем украшенной_функции.
Я использую python 2.7.1.