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