ऐसा इसलिए है क्योंकि __lt__()
और संबंधित तुलना विधियां आमतौर पर सूची प्रकारों पर अप्रत्यक्ष रूप से उपयोग की जाती हैं। कभी-कभी एल्गोरिदम किसी अन्य तरीके से प्रयास करने या डिफ़ॉल्ट विजेता चुनने का विकल्प चुनता है। एक अपवाद उठाना जब तक पकड़ा नहीं जाता है, जबकि NotImplemented
उठाया नहीं जाता है और आगे के परीक्षणों में इसका उपयोग किया जा सकता है।
http://jcalderone.livejournal.com/32837.html
उस लिंक को संक्षेप में प्रस्तुत करने के लिए:। क्रम है कि यह किसी और से पूछने आपरेशन को पूरा करने के लिए करना चाहिए
"NotImplemented
संकेतों अभिव्यक्ति a == b
में, यदि a.__eq__(b)
रिटर्न NotImplemented
, तो अजगर की कोशिश करता b.__eq__(a)
। b
True
या False
वापस करने के लिए पर्याप्त जानता है, तो अभिव्यक्ति सफल हो सकती है। यदि ऐसा नहीं होता है, तो रनटाइम अंतर्निहित व्यवहार में वापस आ जाएगा (जो iden पर आधारित है ==
और !=
के लिए tity)। "
मैं इसका उपयोग करके सावधान रहूंगा, क्योंकि यह लिंक दस्तावेज़ के अंत के पास बताता है। –
जब पाइथन दुभाषिया जांचता है कि 'a .__ eq __ (बी)' वापस नहीं आया है, तो क्या यह आसानी से नहीं आया है, इसके बजाय NotImplementedError (और 'b .__ eq __ (ए) 'या फिर जो भी हो)? – Veky
@ वेकी। एक अपवाद उठाने के लिए शायद एक उच्च ओवरहेड है। एक तरह के ऑपरेशन में किसी भी ओवरहेड को सूची के आकार से बड़ा किया जाएगा, भले ही अंतर बहुत छोटा था, फिर भी यह तेजी से कार्यान्वयन को समझने के लिए समझ में आता है। आप भी अपने लूप से बाहर नहीं निकलना चाहते हैं और उनको पुन: पेश करना नहीं चाहते हैं जो एक प्रयास/पकड़ कार्यान्वयन की आवश्यकता होगी। – SpliFF