हाँ, मैं आप रूपरेखा दे सकते हैं, लेकिन मेरे अजगर एक है थोड़ा जंगली और मैं विस्तार से व्याख्या करने में बहुत व्यस्त हूं।
मूल रूप से, आप विधि है कि मूल, जैसे फोन करेगा में एक प्रॉक्सी रखना होगा:
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 answer मदद मिल सकती है कि आप ऊपर समझते हैं।
और अधिक विस्तार में:
हालांकि इस सवाल का जवाब स्वीकार कर लिया गया, ग्लेन के साथ दिलचस्प चर्चा की वजह से और नि: शुल्क कुछ ही मिनटों के होने, मैं अपने जवाब पर विस्तार करने के लिए चाहता था:
# 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)
स्रोत
2010-09-30 10:46:53
+1 अद्भुत मॉक मॉड्यूल के साथ मेरी दुनिया को विघटित करने के लिए +1। –
@RonCohen: हाँ, यह बहुत अद्भुत है, और हर समय भी बेहतर हो रहा है। :) – Macke
मॉक का उपयोग करते समय निश्चित रूप से जाने का तरीका है, मैं assert_called_once का उपयोग करने के खिलाफ सलाह दूंगा, बस अस्तित्व में नहीं है :) – FelixCQ