Python 2: ใช้งาน __str __ () เท่านั้นและส่งคืน Unicode
เมื่อ__unicode__()
ละไว้และมีคนโทรออกunicode(o)
หรือโทรหาu"%s"%o
งูใหญ่o.__str__()
และแปลงเป็นยูนิโค้ดโดยใช้การเข้ารหัสระบบ (ดูเอกสารประกอบของ__unicode__()
)
ตรงกันข้ามไม่เป็นความจริง หากคุณใช้__unicode__()
แต่ไม่ได้__str__()
แล้วเมื่อสายใครบางคนstr(o)
หรือผลตอบแทนหลาม"%s"%o
repr(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"☺"
)
ฉันรู้ว่าบางคนอาจพบข้อโต้แย้งนี้