Использование декоратора может быть довольно элегантным, я не проверял это, но что-то вроде этого может работать:
class myDecorator(object):
def __init__(self, inner):
self.inner = inner
self.log = {}
def __getattr__(self,name):
self.log[name] = self.log.get(name,0)+1
return getattr(self.inner,name)
def __setattr__(self,name,value):
setattr(self.inner,name,value)
Я понимаю, что вы не хотели регистрировать количество вызовов для каждого метода, но обращались к каждому другому регистратору. Все же я думаю, что декоратор может быть довольно элегантным.
Не думаю, что я выспался, идея заключалась бы в том, чтобы обернуть вызовы в ваш логгер, я смешиваю использование декоратора с шаблоном декоратора. (На самом деле сочетание шаблона и синтаксиса было бы отличным ответом)
Вот более полное решение. Извините, я понял, что я был кем-то, кто ошибался в Интернете .
class LoggerLogger(object):
def __init__(self,inner,name):
self.inner = inner
self.calls = 0
def __call__(self,*args,**kwargs):
self.calls += 1
return self.inner(*args,**kwargs)
def loggerDecorator(func):
def inner(name):
logger = func(name)
logger.debug = LoggerLogger(logger.debug,name)
return inner
getLogger = loggerDecorator(getLogger)