जब मैं जादू विधि __eq__
को ओवरराइड करने का प्रयास करता हूं, और में प्राप्त मूल विधि तक पहुंचने के लिए super
का उपयोग करता हूं, तो मुझे एक त्रुटि मिलती है। वहाँ कोई रास्ता नहीं है यह एक बग है, लेकिन यह यकीन है कि एक तरह लगता है:'सुपर' ऑब्जेक्ट में कोई विशेषता नहीं है '__eq__'
class A(object):
def __eq__(self, other):
return super(A, self).__eq__(other)
A() == 0
# raises AttributeError: 'super' object has no attribute '__eq__'
इस unintuitive है क्योंकि object.__eq__
मौजूद है, लेकिन class A(object): pass
के लिए यह नहीं है। अगर मुझे __eq__
रीसेट्स is
चेक पर गलत नहीं हैं, तो यह यहां कामकाज हो सकता है, लेकिन का उपयोग super
के बजाय मिश्रित अनुकूल नहीं है। उस मार्ग पर जाना मेरे मामले में ठीक है, लेकिन दूसरों में यह शायद नहीं हो सकता है।
कोई सुझाव या जानकारी __eq__
पर काम क्यों करती है इस तरह से काम करेगा।
त्रुटि 2.7 में उठाई गई है लेकिन 3.5 –
में नहीं उठाई गई है, 'ऑब्जेक्ट' ** उदाहरण ** पर '__eq__' का समर्थन नहीं करता है ... 'ऑब्जेक्ट() .__ eq__' आज़माएं, यह' एट्रिब्यूट एरर 'उठाएगा '... इसके बजाय 'ऑब्जेक्ट .__ eq__ (संभवतः) टाइप करने के लिए क्लासमेड है (जैसे' ऑब्जेक्ट .__ eq __ (ऑब्जेक्ट) ') – donkopotamus
@donkopotamus: यह आपकी ऑब्जेक्ट की तुलना अन्य' 'के साथ नहीं करेगा; यह 'नव' के साथ एक नव निर्मित "रिक्त" ऑब्जेक्ट की तुलना करेगा। – BrenBarn