2015-06-04 6 views
6

मान लीजिए मैं निम्नलिखित कार्यक्रम है:क्या __ne__ एक ओवरराइड __eq__ का उपयोग करता है?

class A(object):                                                                
    def __eq__(self, other): 
     return True 

a0 = A() 
a1 = A() 
print a0 != a1 

आप अजगर के साथ इसे चलाते हैं उत्पादन True है। मेरा सवाल

  1. __ne__ विधि लागू नहीं की गई है, क्या पाइथन डिफ़ॉल्ट पर गिरते हैं?
  2. यदि पाइथन एक डिफ़ॉल्ट विधि पर पड़ता है यह निर्धारित करने के लिए कि क्या दो ऑब्जेक्ट बराबर हैं या नहीं, तो क्या इसे __eq__ पर कॉल नहीं करना चाहिए और फिर परिणाम को अस्वीकार कर देना चाहिए?

उत्तर

12

the docs से:

तुलना ऑपरेटरों के बीच कोई निहित रिश्ते रहे हैं। x==y की सच्चाई यह नहीं दर्शाती है कि x!=y गलत है। तदनुसार, __eq__() को परिभाषित करते समय, किसी को भी __ne__() परिभाषित करना चाहिए ताकि ऑपरेटर अपेक्षित व्यवहार कर सकें।

+0

तो यदि '' __ne__'' लागू नहीं किया गया है, तो क्या मुझे दो वस्तुओं की तुलना करने के लिए ''! = '' का उपयोग करने पर पायथन एक अपवाद फेंकना चाहिए? – dorafmon

+3

@ डोराफमन: नहीं, क्योंकि डिफ़ॉल्ट कार्यान्वयन '__eq__' से परामर्श नहीं करता है, यह केवल 'स्वयं अन्य नहीं है' देता है। –

संबंधित मुद्दे