Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

อธิบายฟังก์ชัน str() vs repr() ใน Python


เอกสาร Python อย่างเป็นทางการระบุว่า __repr__ ถูกใช้เพื่อค้นหาการแสดงสตริง "เป็นทางการ" ของอ็อบเจกต์ และ __str__ ถูกใช้เพื่อค้นหาการแสดงสตริงที่ "ไม่เป็นทางการ" ของอ็อบเจ็กต์ คำสั่งพิมพ์และฟังก์ชันในตัว str() ใช้ __str__ เพื่อแสดงการแทนค่าสตริงของวัตถุในขณะที่ฟังก์ชันในตัว repr() ใช้ __repr__ เพื่อแสดงวัตถุ ให้เรายกตัวอย่างเพื่อทำความเข้าใจว่าทั้งสองวิธีทำอะไรได้จริง

ให้เราสร้างวัตถุ datetime -

>>> import datetime
>>> today = datetime.datetime.now()
When I use the built-in function str() to display today:
>>> str(today)
'2018-01-12 09:21:58.130922'

เราเห็นว่าวันที่แสดงเป็นสตริงในลักษณะที่ผู้ใช้สามารถเข้าใจวันที่และเวลาได้ ทีนี้มาดูเมื่อเราใช้ฟังก์ชันในตัว repr()−

>>> repr(today)
'datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)'

เราเห็นว่าสิ่งนี้ส่งคืนสตริงด้วย แต่สตริงนั้นเป็นการแสดง "เป็นทางการ" ของอ็อบเจกต์ datetime ซึ่งหมายความว่าการแสดงสตริง "เป็นทางการ" นี้สามารถสร้างวัตถุขึ้นใหม่ได้ -

>>> eval('datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)')
datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)

ฟังก์ชันในตัว eval() ยอมรับสตริงและแปลงเป็นอ็อบเจ็กต์ datetime

ดังนั้น โดยทั่วไปแล้ว ทุกคลาสที่เราโค้ดจะต้องมี __repr__ และหากคุณคิดว่ามันจะเป็นประโยชน์ที่จะมีเวอร์ชันสตริงของอ็อบเจ็กต์ เช่นในกรณีของ datetime ให้สร้างฟังก์ชัน __str__