मै जादू तुलना विधियों के कुछ भ्रमित व्यवहार में भाग गया हूं। मान लीजिए कि हमें निम्नलिखित वर्ग है:पायथन जादू विधि भ्रम
class MutNum(object):
def __init__ (self, val):
self.val = val
def setVal(self, newval):
self.val = newval
def __str__(self):
return str(self.val)
def __repr__(self):
return str(self.val)
# methods for comparison with a regular int or float:
def __eq__(self, other):
return self.val == other
def __gt__(self, other):
return self.val > other
def __lt__(self, other):
return self.val < other
def __ge__(self, other):
return self.__gt__(other) or self.__eq__(other)
def __le__(self, other):
return self.__lt__(other) or self.__eq__(other)
वर्ग क्या यह एक नियमित पूर्णांक या नाव के लिए एक MutNum वस्तु की तुलना करने के लिए माना जाता है, करता है कोई समस्या नहीं है। हालांकि, और यही वह है जो मुझे समझ में नहीं आता है, यह जादू की विधियों को दो MutNum ऑब्जेक्ट्स दिए जाने पर ठीक से तुलना करता है।
a = MutNum(42)
b = MutNum(3)
print(a > b) # True
print(a >= b) # True
print(a < b) # False
print(a <= b) # False
print(a == b) # False
यह क्यों काम करता है? धन्यवाद।
उदाहरण के लिए, '__add__' और' __radd__' के समान संबंध में खड़े '__gt__' और' __lt__' के बारे में सोचने में मदद मिल सकती है। यदि पहला लागू नहीं होता है, तो पाइथन दूसरे को ऑपरेटरों के साथ कोशिश करता है। – chepner