Capture eventos "antes / depois da chamada da função" para todas as funções da classe

Existe a possibilidade de capturar eventos "antes / depois da chamada da função" para todas as funções da classe, sem decorar cada uma dessas funções? Pode ser algum decorador de classe? Em outras palavras, para esse código, eu gostaria de obter a seguinte saída:

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

Não preciso disso para rastrear. Na aula que trabalha com funções assíncronas, preciso saber se alguma função foi chamada antes que outra função fosse concluída.

questionAnswers(2)

yourAnswerToTheQuestion