पायथन में एक सिंगलटन है NotImplemented
।
कोई व्यक्ति अपवाद NotImplemented
को बढ़ाने के बजाय कभी क्यों लौटना चाहेगा NotImplementedError
? क्या यह सिर्फ कीड़े खोजने के लिए कठिन नहीं होगा, जैसे कि कोड जो अमान्य तरीकों को निष्पादित करता है?
पायथन में एक सिंगलटन है NotImplemented
।
कोई व्यक्ति अपवाद NotImplemented
को बढ़ाने के बजाय कभी क्यों लौटना चाहेगा NotImplementedError
? क्या यह सिर्फ कीड़े खोजने के लिए कठिन नहीं होगा, जैसे कि कोड जो अमान्य तरीकों को निष्पादित करता है?
जवाबों:
ऐसा इसलिए है क्योंकि __lt__()
और संबंधित तुलना विधियां आमतौर पर अप्रत्यक्ष रूप से सूची प्रकारों और इस तरह से उपयोग की जाती हैं। कभी-कभी एल्गोरिथ्म किसी अन्य तरीके से प्रयास करने या डिफ़ॉल्ट विजेता चुनने का चयन करेगा। जब तक पकड़ा NotImplemented
नहीं जाता है तब तक एक अपवाद को उठाना एक तरह से टूट जाएगा, जबकि उठाया नहीं जाता है और आगे के परीक्षणों में उपयोग किया जा सकता है।
http://jcalderone.livejournal.com/32837.html
उस लिंक को संक्षेप में प्रस्तुत करने के लिए:
"
NotImplemented
रनटाइम को संकेत देता है कि उसे ऑपरेशन को संतुष्ट करने के लिए किसी और से पूछना चाहिए। अभिव्यक्ति मेंa == b
, यदिa.__eq__(b)
रिटर्न देता हैNotImplemented
, तो पायथन कोशिश करता हैb.__eq__(a)
। यदिb
वह लौटने के लिए पर्याप्त जानता हैTrue
याFalse
, तो अभिव्यक्ति सफल हो सकती है। यदि यह नहीं होता है, तो रनटाइम होगा। बिल्ट-इन व्यवहार (जो पहचान के लिए==
और!=
) पर आधारित है, पर वापस जाएं । "
a.__eq__(b)
NotImplemented लौटा है, तो क्या वह आसानी से NotImplementedError को नहीं पकड़ सकता है (और कॉल करें b.__eq__(a)
या फिर जो भी हो)?
क्योंकि उनके पास अलग-अलग उपयोग के मामले हैं।
डॉक्स को उद्धृत करना (पायथन 3.6):
द्विआधारी विशेष तरीके से किया जाना चाहिये (जैसे
__eq__()
,__lt__()
,__add__()
,__rsub__()
, आदि) संकेत मिलता है कि आपरेशन अन्य प्रकार के संबंध में लागू नहीं है
[...] उपयोगकर्ता परिभाषित आधार वर्गों में, अमूर्त विधियों को इस अपवाद को उठाना चाहिए जब उन्हें विधि को ओवरराइड करने के लिए व्युत्पन्न वर्ग की आवश्यकता होती है, या जबकि कक्षा को यह इंगित करने के लिए विकसित किया जा रहा है कि वास्तविक कार्यान्वयन को अभी भी जोड़ने की आवश्यकता है।
विवरण के लिए लिंक देखें।
एक कारण प्रदर्शन है। समृद्ध तुलना जैसी स्थिति में, जहां आप कम समय में बहुत सारे ऑपरेशन कर सकते हैं, बहुत सारे अपवादों को सेट करना और उन्हें संभालना बस एक NotImplemented
मूल्य वापस करने से बहुत अधिक समय ले सकता है ।