¿Mejor forma de registrar llamadas de método en Python?
Podemos codificar algún tipo de decorador de registro para hacer eco de llamadas de función / método como las siguientes:
def log(fn):
...
@log
def foo():
...
class Foo(object):
@log
def foo(self):
...
@log
def bar(self, a, b):
...
@log
def foobar(self, x, y, z):
...
Pero, ¿qué pasa si queremos registrar llamadas de método sin poner tantos @log delante de cada definición de metanfetamina? ¿Hay alguna manera de poner un decorador encima de una definición de clase para hacer que todas sus llamadas a métodos sean decoradas / registradas? ¿O hay otras formas mejores e interesantes de hacerlo en lugar de decorador?