पायथन 2: केवल __str __ () को लागू करें, और एक यूनिकोड लौटाएं।
जब __unicode__()छोड़ा जाता है और कोई व्यक्ति कॉल करता है unicode(o)या u"%s"%o, पायथन कॉल करता है o.__str__()और सिस्टम एन्कोडिंग का उपयोग करके यूनिकोड में परिवर्तित होता है। (का प्रलेखन__unicode__() देखें ।)
विपरीत सत्य नहीं है। यदि आप कार्यान्वित करते __unicode__()हैं __str__(), लेकिन तब नहीं , जब कोई फोन करता है str(o)या "%s"%o, पायथन वापस लौटता है repr(o)।
दलील
यह एक unicodeसे लौटने के लिए क्यों काम करेगा __str__()?
यदि __str__()एक यूनिकोड लौटाता है, तो पायथन स्वचालित रूप strसे सिस्टम एन्कोडिंग का उपयोग करके इसे परिवर्तित करता है ।
फायदा क्या है?
① यह सिस्टम एन्कोडिंग (यानी, locale.getpreferredencoeding(…)) के बारे में चिंता करने से आपको मुक्त करता है । न केवल वह गन्दा है, व्यक्तिगत रूप से, लेकिन मुझे लगता है कि यह कुछ ऐसा है जिसे सिस्टम को वैसे भी ध्यान रखना चाहिए। ② यदि आप सावधान हैं, तो आपका कोड पायथन 3 के साथ क्रॉस-संगत हो सकता है, जिसमें __str__()यूनिकोड रिटर्न होता है।
क्या यह एक फ़ंक्शन नामक यूनिकोड को वापस करने के लिए धोखा नहीं है __str__()?
थोड़ा सा। हालाँकि, आप पहले से ही ऐसा कर रहे होंगे। यदि आपके पास from __future__ import unicode_literalsआपकी फ़ाइल के शीर्ष पर है, तो एक अच्छा मौका है कि आप यूनिकोड को बिना जाने भी वापस कर सकते हैं।
पायथन 3 के बारे में क्या?
पायथन 3 का उपयोग नहीं करता है __unicode__()। हालाँकि, यदि आप __str__()इसे लागू करते हैं , तो यह पायथन 2 या पायथन 3 के तहत यूनिकोड देता है, तो आपके कोड का वह हिस्सा क्रॉस-संगत होगा।
क्या होगा यदि मैं इससे unicode(o)अलग होना चाहता हूं str()?
दोनों को लागू करें __str__()(संभवतः वापस लौटते हुए str) और __unicode__()। मुझे लगता है इस दुर्लभ होगा, लेकिन आप काफ़ी भिन्न आउटपुट चाहते हो सकता है (उदाहरण के लिए, विशेष वर्ण का ASCII संस्करणों की तरह ":)"के लिए u"☺")।
मुझे लगता है कि कुछ को यह विवादास्पद लग सकता है।