পাইথন 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"☺"
) চাইবেন ।
আমি বুঝতে পারি যে কেউ কেউ এই বিতর্কিত হতে পারে।