Python 2: ใช้งาน __str __ () เท่านั้นและส่งคืน Unicode
เมื่อ__unicode__()ละไว้และมีคนโทรออกunicode(o)หรือโทรหาu"%s"%oงูใหญ่o.__str__()และแปลงเป็นยูนิโค้ดโดยใช้การเข้ารหัสระบบ (ดูเอกสารประกอบของ__unicode__() )
ตรงกันข้ามไม่เป็นความจริง หากคุณใช้__unicode__()แต่ไม่ได้__str__()แล้วเมื่อสายใครบางคนstr(o)หรือผลตอบแทนหลาม"%s"%orepr(o)
หลักการและเหตุผล
ทำไมมันจะทำงานกลับunicodeจาก__str__()?
ถ้า__str__()ส่งคืนยูนิโค้ด Python จะแปลงเป็นการstrเข้ารหัสของระบบโดยอัตโนมัติ
ประโยชน์คืออะไร
①ทำให้คุณไม่ต้องกังวลเกี่ยวกับการเข้ารหัสของระบบ (เช่นlocale.getpreferredencoeding(…)) ไม่เพียง แต่จะยุ่งเท่านั้นส่วนตัว แต่ฉันคิดว่ามันเป็นสิ่งที่ระบบควรดูแลอยู่ดี ②หากคุณระมัดระวังรหัสของคุณอาจออกมาไขว้กันได้กับ Python 3 ซึ่ง__str__()ส่งคืน Unicode
ไม่เป็นการหลอกลวงที่จะส่งคืน Unicode จากฟังก์ชันที่เรียกว่า__str__()ใช่หรือไม่
เล็กน้อย. อย่างไรก็ตามคุณอาจทำไปแล้ว หากคุณfrom __future__ import unicode_literalsอยู่ที่ด้านบนสุดของไฟล์คุณมีโอกาสดีที่คุณจะส่งคืนยูนิโค้ดโดยที่ไม่รู้ตัว
Python 3 เกี่ยวกับอะไร?
งูหลาม 3 __unicode__()ไม่ได้ใช้ อย่างไรก็ตามหากคุณใช้งาน__str__()เพื่อให้ส่งคืน unicode ภายใต้ Python 2 หรือ Python 3 ส่วนหนึ่งของรหัสนั้นจะสามารถใช้งานร่วมกันได้
ถ้าฉันต้องการunicode(o)ที่จะแตกต่างอย่างมีนัยสำคัญจากที่str()ใด
การดำเนินการทั้งสอง__str__()(อาจจะกลับมาstr) __unicode__()และ ฉันคิดว่านี่จะหายาก แต่คุณอาจต้องการผลลัพธ์ที่แตกต่างอย่างมาก (เช่นอักขระพิเศษรุ่น ASCII เช่น":)"สำหรับu"☺")
ฉันรู้ว่าบางคนอาจพบข้อโต้แย้งนี้