यह अधिक सामान्य प्रश्न है तो भाषा-विशिष्ट, मैं इस समस्या में पाइथन ncurses मॉड्यूल के साथ खेलते समय टक्कर लगी। मुझे लोकेल पात्रों को प्रदर्शित करने की आवश्यकता थी और उन्हें पात्रों के रूप में पहचाना गया था, इसलिए मैंने शाप मॉड्यूल से कुछ कार्य/विधियों को तुरंत बंद कर दिया।बंदर-पैच या नहीं करने के लिए?
यह वही था जो मैं तेज़ और बदसूरत समाधान कहता हूं, भले ही यह काम करता हो। और परिवर्तन सापेक्ष रूप से छोटे थे, इसलिए मैं उम्मीद कर सकता हूं कि मैंने कुछ भी गड़बड़ नहीं किया है। मेरी योजना एक और समाधान ढूंढना था, लेकिन यह देखकर काम करता है और अच्छी तरह से काम करता है, आप जानते हैं कि यह कैसे है, मैं उन समस्याओं के लिए आगे बढ़ गया जो मुझे सौदा करना था, और मुझे यकीन है कि इसमें कोई बग नहीं है, मैं कभी नहीं इसे बेहतर करो।
हालांकि अधिक सामान्य प्रश्न मुझे दिखाई दिया - जाहिर है कि कुछ भाषाएं कक्षाओं के अंदर कोड के बड़े हिस्से को बंदर-पैच करने की अनुमति देती हैं। यदि यह कोड है जो मैं केवल अपने लिए उपयोग करता हूं, या परिवर्तन छोटा है, तो यह ठीक है। क्या होगा यदि कुछ अन्य डेवलपर मेरा कोड लेते हैं, तो वह देखता है कि मैं कुछ प्रसिद्ध मॉड्यूल का उपयोग करता हूं, इसलिए वह इसे काम कर सकता है क्योंकि इसका उपयोग किया जाता है। फिर, यह विधि अचानक भिन्न होती है तो इसे करना चाहिए।
तो, बहुत ही व्यक्तिपरक, क्या हमें बंदर पैचिंग का उपयोग करना चाहिए, और यदि हां, कब और कैसे? हमें इसे कैसे दस्तावेज करना चाहिए?
संपादित करें: @guerda के लिए:
बंदर-पैचिंग निष्पादन समय पर कोड के कुछ खंड के व्यवहार बदलने के लिए, कोड में ही बदले बिना dynamicly की क्षमता है। अजगर में
एक छोटा सा उदाहरण:
import os
def ld(name):
print("The directory won't be listed here, it's a feature!")
os.listdir = ld
# now what happens if we call os.listdir("/home/")?
os.listdir("/home/")
क्या आप जल्द ही नए लोगों के लिए "बंदर पैचिंग" समझा सकते हैं? धन्यवाद! – guerda
+1 यह व्यक्तिपरक और तर्कसंगत है, SO –
पर सबसे अच्छे प्रश्नों की तरह संबंधित: http://stackoverflow.com/questions/2225698/to-monkeypatch-or-not-to-monkeypatch-that-is-the-question –