के साथ इंट-व्युत्पन्न कक्षा से मूल int तुलना तक पहुंचने के लिए मेरे पास अधिभारित तुलना ऑपरेटर के साथ एक अंतर्निहित कक्षा है।ओवरलोडेड तुलना ऑपरेटर
ओवरलोड किए गए तरीकों के शरीर में मुझे मूल ऑपरेटर का उपयोग करने की आवश्यकता है।
खिलौना उदाहरण:
>>> class Derived(int):
... def __eq__(self, other):
... return super(Derived, self).__eq__(other)
अजगर 3.3+ वाले ठीक काम करता है, लेकिन अपवाद AttributeError: 'super' object has no attribute '__eq__'
साथ अजगर 2.7 के साथ विफल रहता है।
मैं कई walkarrounds, मैं बहुत साफ नहीं मिला जिसके बारे में सोच सकते हैं:
return int(self) == other
बस इसे तुलना करने के लिए एक नया int
वस्तु के निर्माण की आवश्यकता है, जबकि
try:
return super(Derived, self).__eq__(other)
except AttributeError:
return super(Derived, self).__cmp__(other) == 0
नियंत्रण आधारित प्रवाह विभाजन पायथन संस्करण पर, जो मुझे बहुत गन्दा लगता है (इसलिए पायथन संस्करण का स्पष्ट रूप से निरीक्षण कर रहा है)।
मैं पाइथन 2.7 और 3.3+ के साथ काम करने के एक सुरुचिपूर्ण तरीके से मूल पूर्णांक तुलना कैसे प्राप्त कर सकता हूं?
आप उपयोग कर सकते हैं 'के माध्यम से' सुपर .__ eq__' विधि की तुलना int'। हालांकि, पाइथन संस्करण के आधार पर अंतर्निहित प्रकारों की तुलना में विधियों को बहुत अलग किया जाता है। इसलिए python2 'super.eq' को 1 तर्क (अन्य) की आवश्यकता होती है जबकि पायथन 3 की आवश्यकता होती है (स्वयं और अन्य) – infotoni91
क्या आप 'int (self) == int (अन्य)' बहुत गन्दा मानते हैं? – Phillip
@ फिलिप यह 'int (self) == अन्य' – abukaj