Tạo và trả lời các câu trả lời trước đó và hiển thị một số ví dụ khác. Nếu được sử dụng đúng cách, sự khác biệt giữa str
và repr
là rõ ràng.Trong ngắn repr
nên trả về một chuỗi có thể được sao chép để xây dựng lại trạng thái chính xác của đối tượng, trong khi str
hữu ích cho các kết quả gỡ lỗi logging
và observing
. Dưới đây là một số ví dụ để xem các kết quả đầu ra khác nhau cho một số thư viện đã biết.
Datetime
print repr(datetime.now()) #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
print str(datetime.now()) #2017-12-12 18:49:27.134452
Các str
là tốt để in vào một tập tin nhật ký, nơi như repr
có thể được tái có mục tiêu nếu bạn muốn chạy nó trực tiếp hoặc đổ nó như lệnh vào một file.
x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
NumPy
print repr(np.array([1,2,3,4,5])) #array([1, 2, 3, 4, 5])
print str(np.array([1,2,3,4,5])) #[1 2 3 4 5]
trong NumPy các repr
là một lần nữa trực tiếp tiêu hao.
Tuỳ chỉnh Vector3 dụ
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __repr__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __str__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
Trong ví dụ này, repr
trở lại một chuỗi có thể được tiêu thụ trực tiếp/thực hiện, trong khi str
là hữu ích hơn như một kết xuất debug.
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #Vector(x:1, y:2, z:3)
Một điều cần lưu ý, nếu str
không được định nghĩa nhưng repr
, str
sẽ tự động gọi repr
. Vì vậy, nó luôn luôn tốt để ít nhất xác định repr
http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python – miku
Đối với bất cứ ai đến từ Ruby, tl; dr là: '__str__' =' to_s 'và' __repr__' = 'kiểm tra'. – Ajedi32