Я пытаюсь создать декоратор, который регистрирует время при запуске метода, имя метода и аргументы этого метода.Log decorator for methods
Этот декоратор работает в некоторых ситуациях, но я хочу, чтобы он работал как можно больше ситуаций. Поэтому я хочу заставить его работать как обычный метод, так и метод класса.
def log(func):
@wraps(func)
def wrapper(*args, **kwargs):
log(func.__name__ + '; ARGS: {}'.format(','.join(str(args))))
return func(*args, **kwargs)
return wrapper
Есть некоторые проблемы:
Это не работает для методов класса. Чтобы заставить его работать в классе, мне пришлось бы поставить
self
в качестве первого аргумента здесьdef wrapper(*args, **kwargs):
и здесьreturn func(*args, **kwargs)
.Я хочу, чтобы он работал для всех типов аргументов (списки, строки, ints, dicts и т. Д.). Это работает только для строк и целых чисел (соответственно для поплавков и т.д.)
Странная вещь, что если я использую его, например, по методу, который принимает два целых числа в качестве аргументов, он выводит его в журнале:
name_of_function; ARGS: (,5,,, ,6,)
Я был бы признателен, если вы поможете мне решить любую из этих проблем.
Да, это очень помогло. Спасибо! –
выше работает на py3. вам может потребоваться немного настроить его для [py2] (https://repl.it/BFjR) <- как это – taesu