Ja, kann ich Ihnen die Umrisse geben, aber meine Python ist ein etwas rostig und ich bin zu beschäftigt, um im Detail zu erklären.
Grundsätzlich müssen Sie einen Proxy in dem Verfahren stellen, die das Original rufen, zB:
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)
Diese StackOverflow answer über aufrufbare kann Ihnen helfen, die oben verstehen.
Im Detail:
Obwohl die Antwort akzeptiert wurde, aufgrund der interessanten Diskussion mit Glenn und ein paar Minuten frei hat, wollte ich auf meine Antwort vergrößern:
# 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)
+1 für diskret erleuchtend meine Welt mit dem wunderbaren Mock-Modul. –
@RonCohen: Ja, es ist ziemlich erstaunlich und wird immer besser. :) – Macke
Während der Verwendung von Mock ist definitiv der Weg zu gehen, würde ich davon abraten mit assert_called_once, mit einfach nicht existiert :) – FelixCQ