Поймать события «до / после вызова функции» для всех функций в классе
Есть ли возможность перехватывать события «до / после вызова функции» для всех функций в классе, не декорируя каждую из этих функций? Может быть, какой-то класс декоратор? Другими словами, для такого кода я хотел бы получить следующий вывод:
class Foo:
def func1():
print('1')
def func2():
print('2')
c = Foo()
c.func1()
c.func2()
# Output I would like to get:
# func1 called
# 1
# func1 finished
# func2 called
# 2
# func2 finished
Мне это нужно не для отслеживания. В классе, работающем с асинхронными функциями, мне нужно знать, была ли вызвана какая-либо функция до того, как другая функция была завершена.