मैजिक मेथड्स वे मेथड्स हैं जो हमें ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में कुछ बहुत अच्छे ट्रिक्स करने की अनुमति देते हैं। इन मेथड्स की पहचान दो अंडरस्कोर (__) द्वारा की जाती है जिनका उपयोग प्रीफिक्स और सफिक्स के रूप में किया जाता है। उदाहरण के लिए, फ़ंक्शन इंटरसेप्टर्स के रूप में जो तब स्वचालित रूप से कॉल किए जाते हैं जब कुछ शर्तें पूरी होती हैं।
Python में __repr__ एक बिल्ट-इन फ़ंक्शन है जिसका उपयोग ऑब्जेक्ट के "आधिकारिक" स्ट्रिंग रिप्रेजेंटेशन की गणना के लिए किया जाता है, जबकि __str__ एक बिल्ट-इन फ़ंक्शन है जो ऑब्जेक्ट के "अनौपचारिक" स्ट्रिंग रिप्रेजेंटेशन की गणना करता है।
उदाहरण कोड - बिना __repr__ के
class String:
def __init__(self, string):
self.string = string
if __name__ == '__main__':
my_string = String('Python')
print(my_string)
आउटपुट
<__main__.String object at 0x000000BF0D411908>
उदाहरण कोड - __repr__ के साथ
class String:
def __init__(self, string):
self.string = string
def __repr__(self):
return 'Object: {}'.format(self.string)
if __name__ == '__main__':
my_string = String('Python')
print(my_string)
आउटपुट
Object: Python
इसमें एक स्ट्रिंग जोड़ने का प्रयास
उदाहरण कोड - __add__ के बिना
class String:
def __init__(self, string):
self.string = string
def __repr__(self):
return 'Object: {}'.format(self.string)
if __name__ == '__main__':
my_string = String('Python')
print(my_string + ' Program')
आउटपुट
TypeError: unsupported operand type(s) for +: 'String' and 'str'
अब String क्लास में __add__ मेथड जोड़ें
उदाहरण कोड - __add__ के साथ
class String:
def __init__(self, string):
self.string = string
def __repr__(self):
return 'Object: {}'.format(self.string)
def __add__(self, other):
return self.string + other
if __name__ == '__main__':
my_string = String('Hello')
print(my_string + ' Python')
आउटपुट
Hello Python