Ja, ich kann Ihnen den Umriss geben, aber mein Python ist etwas verrostet und ich bin zu beschäftigt, um es im Detail zu erklären.
Grundsätzlich müssen Sie einen Proxy in die Methode einfügen, der das Original aufruft, z.
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()
f = fred()
f.blog = methCallLogger(f.blog)
Diese StackOverflow-Antwort zu callable kann Ihnen helfen, die oben genannten Punkte zu verstehen.
Genauer:
Obwohl die Antwort aufgrund der interessanten Diskussion mit Glenn und der Tatsache, dass ich ein paar Minuten Zeit hatte, akzeptiert wurde, wollte ich meine Antwort erweitern:
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
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)