पायथन 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"☺"
)।
मुझे लगता है कि कुछ को यह विवादास्पद लग सकता है।