Python - обеспечение сохранения метаданных в декорированной функции - PullRequest
0 голосов
/ 13 июля 2020

Не могли бы вы сообщить мне, есть ли способ для декорированной функции сохранять свои метаданные? Это будет код для декоратора:

def timer(func):
  """prints how long a function takes to run."""
  def wrapper(*args, **kwargs):
    t_start = time.time()

    result = functionalists(*args, **kwargs)

    t_total = time.time() - t_start
    print('{} took {}s'.format(functionalists.__name__, t_total))

    return result

  return wrapper

Далее будет декорированная функция.

@timer
def sleep_n_seconds(n=10):
  """pause processing for n seconds.

  Args:
    n (int): The number of seconds to pause for.
  """
  time.sleep(n)

Когда я пытаюсь распечатать строки документации с помощью следующего кода, метаданные не возвращается.

print(sleep_n_seconds.__doc__)

Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.

Спасибо

1 Ответ

1 голос
/ 13 июля 2020

Используйте функцию wraps из модуля functools, чтобы сохранить подпись. :

from functools import wraps 
def timer(func):
  @wraps(func)
  """prints how long a function takes to run."""
  def wrapper(*args, **kwargs):
    t_start = time.time()

    result = functionalists(*args, **kwargs)

    t_total = time.time() - t_start
    print('{} took {}s'.format(functionalists.__name__, t_total))

    return result

  return wrapper
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...