Мне нравится эта проблема, я работал над пакетом декоратора и думаю, что это может быть отличным дополнением. Тем не менее, дайте мне знать, если это приведет вас в правильном направлении. Он может записывать каждый вызов метода, записывать его аргументы и kwargs. Затем вы можете выполнить любую аналитику / агрегацию с теми результатами, которые вам нужны.
import functools
def bvr_start(arg=None):
def bvr_start_decorator(func):
@functools.wraps(func)
def bvr_start_wrapper(*args, **kwargs):
msg = ("STARTED | "
"FUNCTION: {} | "
"ARGS: {} | "
"KWARGS: {} ").format(func.__name__,
args,
kwargs)
args[0].called_functions.append(msg)
print(msg)
return_value = func(*args, **kwargs)
return return_value
return bvr_start_wrapper
if callable(arg):
return bvr_start_decorator(arg)
return bvr_start_decorator
class Hello:
called_functions = []
@bvr_start
def test_function_one(self):
print("Inside my function one")
@bvr_start
def test_function_two(self, x):
print("Inside my function two")
@bvr_start
def test_function_three(self, y):
print("Inside my function three")
hello = Hello()
hello.test_function_one()
hello.test_function_two(4)
hello.test_function_three(y=5)
print("Now print out your called functions")
for called_function in hello.called_functions:
print(called_function)
Теперь результат этого:
STARTED | FUNCTION: test_function_one | ARGS: (<__main__.Hello object at 0x1038ef2d0>,) | KWARGS: {}
Inside my function one
STARTED | FUNCTION: test_function_two | ARGS: (<__main__.Hello object at 0x1038ef2d0>, 4) | KWARGS: {}
Inside my function two
STARTED | FUNCTION: test_function_three | ARGS: (<__main__.Hello object at 0x1038ef2d0>,) | KWARGS: {'y': 5}
Inside my function three
Теперь распечатайте вызванные вами функции
STARTED | FUNCTION: test_function_one | ARGS: (<__main__.Hello object at 0x1038ef2d0>,) | KWARGS: {}
STARTED | FUNCTION: test_function_two | ARGS: (<__main__.Hello object at 0x1038ef2d0>, 4) | KWARGS: {}
STARTED | FUNCTION: test_function_three | ARGS: (<__main__.Hello object at 0x1038ef2d0>,) | KWARGS: {'y': 5}
Теперь у вас есть запись функции и аргумент. И вы можете сделать еще несколько таких изменений, как форматирование в последнем списке named_functions, чтобы подсчитать, сколько раз каждый вызывался с чем!
Спасибо, и дайте мне знать, если это поможет!