दिलचस्प पोस्ट
आईफोन 6 एस या आईफोन 6 एस प्लस सिमुलेटर पर बल के स्पर्श / 3 डी स्पर्श को सिमुलेट करें जावा जांचें कि क्या दो आयत किसी भी बिंदु पर ओवरलैप हो गिट में एक खास प्रतिबद्धता को वापस लाएं, जो कि दूरस्थ रीपो पर धकेल दिया गया है '+' ऑपरेटर का उपयोग करके स्ट्रिंग समाकलन अपरिभाषित व्यवहार और बीमार बनने के बीच का अंतर, कोई नैदानिक ​​संदेश आवश्यक नहीं है मुझे हाशसेट <T> प्रकार का उपयोग कब करना चाहिए? फ्लैग एन्यूम में मूल्यों पर गड़बड़ाहट? क्या हेक स्टडी :: डेक के स्मृति ओवरहेड के साथ चल रहा है? एक ओरेकल डाटाबेस से एक्सेल स्प्रैडशीट बनाएँ JavaFX तालिका दृश्य में बटन कैसे जोड़ें पायथन परिवर्तनशील गुंजाइश त्रुटि जावा का उपयोग कर स्थानीय सिस्टम का सबनेट मुखौटा कैसे प्राप्त करें? Analytics Google API त्रुटि 403: "प्रयोक्ता के पास कोई भी Google Analytics खाता नहीं है" ग्लोबल जावास्क्रिप्ट व्हेरिएबल स्कोप: यह काम क्यों नहीं करता है? एंड्रॉइड स्टूडियो ग्रैडल कॉन्फ़िगरेशन नाम 'डिफॉल्ट' के साथ नहीं मिला

पायथन __str__ बनाम __unicode__

क्या आप को __str__() बनाम __unicode__() कार्यान्वयन के लिए एक अजगर सम्मेलन है। मैंने कक्षाओं को __unicode__() अधिक से अधिक __unicode__() अधिक बार देखा है लेकिन यह सुसंगत नहीं दिखता है। क्या कोई विशिष्ट नियम हैं, जब किसी अन्य के विरुद्ध एक को लागू करना बेहतर होता है? क्या यह आवश्यक है कि दोनों को कार्यान्वित किया जाए?

Solutions Collecting From Web of "पायथन __str__ बनाम __unicode__"

__str__() पुरानी विधि है – यह बाइट्स रिटर्न करती है __unicode__() नई, पसंदीदा विधि है – यह अक्षर देता है नाम थोड़ा भ्रमित हैं, लेकिन 2.x में हम संगतता कारणों के लिए उनके साथ फंस रहे हैं। आम तौर पर, आपको अपने स्ट्रिंग फॉर्मेटिंग को __unicode__() में रखना चाहिए, और एक स्टब __str__() विधि बनाएं:

 def __str__(self): return unicode(self).encode('utf-8') 

3.0 में, str में वर्ण होते हैं, इसलिए उसी विधियों का नाम __bytes__() और __str__() । ये अपेक्षा के अनुरूप व्यवहार करते हैं

अगर मुझे किसी विशेष श्रेणी के लिए सूक्ष्म-अनुकूलन __unicode__ विशेष रूप से परवाह नहीं थी, तो मैं हमेशा ही __unicode__ ही कार्यान्वित __unicode__ , क्योंकि यह अधिक सामान्य है। जब मैं इस तरह के मिनट के प्रदर्शन के मुद्दों (जो अपवाद है, न कि नियम) के बारे में परवाह करता हूं, तो __str__ केवल (जब मैं साबित कर सकता हूं कि कभी भी स्ट्रैटेड आउटपुट में गैर-एएससीआईआई वर्ण नहीं होगा) या दोनों (जब दोनों संभव हो) हो, मदद हो सकती है।

ये मुझे लगता है कि ठोस सिद्धांत हैं, लेकिन व्यवहार में यह बहुत ही सामान्य ज्ञान है कि यह साबित करने के प्रयास किए बिना एएससीआईआई वर्णों के अलावा कुछ भी नहीं होगा (जैसे स्ट्रैडफार्म फॉर्म में केवल अंक, विराम चिह्न, और शायद छोटा एएससीआईआई नाम 😉 जिसमें यदि यह सीधे "बस __str__ " दृष्टिकोण पर आगे बढ़ने के लिए काफी विशिष्ट है (लेकिन यदि मैंने एक प्रोग्रामिंग टीम के साथ काम किया है, तो उस से बचने के लिए एक स्थानीय दिशानिर्देश प्रस्तावित किया गया है, मुझे प्रस्ताव पर +1 करना होगा, क्योंकि इन मामलों में गलती करना आसान है और "समयपूर्व अनुकूलन प्रोग्रामिंग में सभी बुराइयों की जड़ है" 😉

दुनिया को कम होने के साथ, संभावना है कि आपके सामने आने वाली किसी भी स्ट्रिंग में यूनिकोड अंततः शामिल होंगे। इसलिए किसी भी नए ऐप्स के लिए, आपको कम से कम __unicode__() प्रदान करना चाहिए। चाहे आप __str__() को भी ओवरराइड __str__() तो फिर स्वाद का मामला है।

यदि आप अजगर 2 और अजगर 3 दोनों में Django में काम कर रहे हैं, तो मैं python_2_unicode_compatible डेकोरेटर की सलाह देता हूं:

पायथन 2 और 3 पर काम करने वाले स्ट्रिंग () और यूनिकोड () विधियों को परिभाषित करने के लिए Django एक आसान तरीका प्रदान करता है: आपको एक स्ट्र () विधि लौटने वाले टेक्स्ट को परिभाषित करना होगा और पायथन 2_ऑनिकोडा-संगत () डेकोरेटर को लागू करना होगा।

जैसा कि पहले टिप्पणियों में एक और जवाब के लिए बताया गया है, भविष्य के कुछ संस्करण। कुत्ते भी इस डेकोरेटर का समर्थन करते हैं। मेरे सिस्टम पर, मुझे अजगर 2 के लिए एक नया भविष्य मॉड्यूल स्थापित करने और python3 के लिए भविष्य स्थापित करने की आवश्यकता है। उसके बाद, यहां एक कार्यात्मक उदाहरण है:

 #! /usr/bin/env python from future.utils import python_2_unicode_compatible from sys import version_info @python_2_unicode_compatible class SomeClass(): def __str__(self): return "Called __str__" if __name__ == "__main__": some_inst = SomeClass() print(some_inst) if (version_info > (3,0)): print("Python 3 does not support unicode()") else: print(unicode(some_inst)) 

यहां उत्पादन का उदाहरण दिया गया है (जहां venv2 / venv3 वर्चुअलएनिव उदाहरण हैं):

 ~/tmp$ ./venv3/bin/python3 demo_python_2_unicode_compatible.py Called __str__ Python 3 does not support unicode() ~/tmp$ ./venv2/bin/python2 demo_python_2_unicode_compatible.py Called __str__ Called __str__