आधिकारिक Python डॉक्यूमेंटेशन के अनुसार, __repr__ किसी ऑब्जेक्ट का "आधिकारिक" स्ट्रिंग रिप्रेजेंटेशन खोजने के लिए उपयोग किया जाता है और __str__ किसी ऑब्जेक्ट का "अनौपचारिक" स्ट्रिंग रिप्रेजेंटेशन खोजने के लिए उपयोग किया जाता है। प्रिंट स्टेटमेंट और str() बिल्ट-इन फंक्शन ऑब्जेक्ट का स्ट्रिंग रिप्रेजेंटेशन प्रदर्शित करने के लिए __str__ का उपयोग करते हैं जबकि repr() बिल्ट-इन फंक्शन ऑब्जेक्ट प्रदर्शित करने के लिए __repr__ का उपयोग करता है। आइए एक उदाहरण लेकर समझें कि ये दो मेथड्स वास्तव में क्या करते हैं।
आइए एक datetime ऑब्जेक्ट बनाएं:
>>> import datetime >>> today = datetime.datetime.now() जब मैं आज को प्रदर्शित करने के लिए बिल्ट-इन फंक्शन str() का उपयोग करता हूं: >>> str(today) '2018-01-12 09:21:58.130922'
हम देखते हैं कि तारीख को इस तरह स्ट्रिंग के रूप में प्रदर्शित किया गया था कि यूज़र तारीख और समय को समझ सके। अब देखते हैं जब हम बिल्ट-इन फंक्शन repr() का उपयोग करते हैं:
>>> repr(today) 'datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)'
हम देखते हैं कि यह भी एक स्ट्रिंग लौटाता है लेकिन यह स्ट्रिंग datetime ऑब्जेक्ट का "आधिकारिक" प्रतिनिधित्व था जिसका अर्थ है कि यह "आधिकारिक" स्ट्रिंग रिप्रेजेंटेशन ऑब्जेक्ट को पुनर्निर्माण कर सकता है:
>>> eval('datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)')
datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)
eval() बिल्ट-इन फंक्शन एक स्ट्रिंग स्वीकार करता है और इसे datetime ऑब्जेक्ट में बदल देता है।
इस प्रकार, सामान्य तौर पर हम जो भी क्लास कोड करते हैं उसमें __repr__ होना चाहिए और यदि आप ऑब्जेक्ट का स्ट्रिंग वर्जन रखना उपयोगी समझते हैं, जैसे datetime के मामले में, तो __str__ फंक्शन बनाएं।