Да, я могу дать вам схему, но мой Python немного ржавый, и я слишком занят, чтобы объяснять подробно.
По сути, вам нужно установить прокси в методе, который вызоветоригинал, например:
class fred(object):
def blog(self):
print "We Blog"
class methCallLogger(object):
def __init__(self, meth):
self.meth = meth
def __call__(self, code=None):
self.meth()
# would also log the fact that it invoked the method
#example
f = fred()
f.blog = methCallLogger(f.blog)
Этот ответ StackOverflow об отзыве может помочь вам понять вышесказанное.
Более подробно:
Несмотря на то, что ответ был принят, из-за интересной беседы с Гленном и нескольких свободных минут я хотел бы расширить свой ответ:
# helper class defined elsewhere
class methCallLogger(object):
def __init__(self, meth):
self.meth = meth
self.was_called = False
def __call__(self, code=None):
self.meth()
self.was_called = True
#example
class fred(object):
def blog(self):
print "We Blog"
f = fred()
g = fred()
f.blog = methCallLogger(f.blog)
g.blog = methCallLogger(g.blog)
f.blog()
assert(f.blog.was_called)
assert(not g.blog.was_called)