পাইথন 2: কেবলমাত্র___ __ () প্রয়োগ করুন এবং একটি ইউনিকোড ফিরিয়ে দিন।
কখন __unicode__()বাদ যায় এবং কেউ কল করে unicode(o)বা u"%s"%oপাইথন কল o.__str__()করে এবং সিস্টেম এনকোডিং ব্যবহার করে ইউনিকোডে রূপান্তর করে। ( ডকুমেন্টেশন__unicode__() দেখুন ।)
বিপরীতটি সত্য নয়। আপনি যদি প্রয়োগ করেন __unicode__()তবে তা করেন না __str__(), তবে যখন কেউ কল করে str(o)বা "%s"%oপাইথন ফিরে আসে repr(o)।
যুক্তিসহ ব্যাখ্যা
এটি unicodeথেকে কেন ফেরত আসবে __str__()?
যদি __str__()কোনও ইউনিকোড দেয়, পাইথন স্বয়ংক্রিয়ভাবে এটিকে strসিস্টেম এনকোডিং ব্যবহার করে রূপান্তর করে ।
লাভ কী?
① এটি আপনাকে সিস্টেম এনকোডিং (অর্থাত্ locale.getpreferredencoeding(…)) এর উদ্বিগ্নতা থেকে মুক্ত করে । ব্যক্তিগতভাবে কেবল এই অগোছালোই নয়, তবে আমি মনে করি এটি সিস্টেমের যে কোনও উপায়ে যত্ন নেওয়া উচিত। You আপনি যদি সাবধান হন তবে আপনার কোডটি পাইথন 3 এর সাথে ক্রস-সামঞ্জস্যপূর্ণ হতে পারে, যাতে __str__()ইউনিকোড ফেরত।
ডাকা ফাংশন থেকে ইউনিকোড ফিরিয়ে দেওয়া কি প্রতারণামূলক নয় __str__()?
একটু. তবে আপনি ইতিমধ্যে এটি করছেন be আপনি যদি from __future__ import unicode_literalsআপনার ফাইল উপরের, একটি ভাল সুযোগ আপনি এমনকি এটা জেনে একটি ইউনিকোড ফিরে করছি।
পাইথন 3 সম্পর্কে কী?
পাইথন 3 ব্যবহার করে না __unicode__()। তবে আপনি যদি প্রয়োগ করেন __str__()যাতে এটি পাইথন 2 বা পাইথন 3 এর মধ্যে ইউনিকোড ফেরত দেয়, তবে আপনার কোডের সেই অংশটি ক্রস-সামঞ্জস্যপূর্ণ হবে।
যদি আমি unicode(o)থেকে আলাদাভাবে থাকতে চাই str()?
উভয়ই প্রয়োগ করুন __str__()(সম্ভবত ফিরছেন str) এবং __unicode__()। আমি ধারণা করি এটি বিরল হবে, তবে আপনি সম্ভবত আলাদা আলাদা আউটপুট (উদাহরণস্বরূপ, বিশেষ অক্ষরের ASCII সংস্করণ যেমন পছন্দ ":)"করতে পারেন u"☺") চাইবেন ।
আমি বুঝতে পারি যে কেউ কেউ এই বিতর্কিত হতে পারে।