Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Sự khác biệt giữa str và repr trong Python
Trong Python, hai phương thức đặc biệt str và repr được sử dụng để trả về chuỗi mô tả trạng thái của một đối tượng. Đối với các lớp (class) có sẵn, hai phương thức này đã được triển khai sẵn. Khi tạo lớp tùy chỉnh, bạn nên triển khai cả hai phương thức này để quản lý cách biểu diễn đối tượng dưới dạng chuỗi.

Định nghĩa hai phương thức đặc biệt str và repr trong Python
object.__str__(self)
- Được gọi bởi hàm
str(object)hoặc các hàm nhưformat()vàprint(). - Trả về chuỗi "không chính thức" (informal) hoặc dễ đọc, dùng để hiển thị cho người dùng.
- Giá trị trả về phải là một đối tượng chuỗi (
string).
object.__repr__(self)
- Được gọi bởi hàm
repr(object)để trả về chuỗi biểu diễn "chính thức" (official) của đối tượng. - Chuỗi này thường được dùng cho mục đích gỡ lỗi (debugging) và cần rõ ràng, dễ hiểu với lập trình viên.
- Nếu một lớp chỉ định nghĩa
__repr__mà không có__str__, Python sẽ sử dụng__repr__làm chuỗi không chính thức.
Tóm lại, chúng ta có thể nói:
__repr__: Cần rõ ràng, không mơ hồ (thậm chí có thể đọc được bằng máy).__str__: Dễ đọc, thân thiện với người dùng cuối.__repr__là phương thức dự phòng cho__str__nếu__str__không được định nghĩa.- Hàm
print()sử dụng__str__, trong khirepr(object)hoặc việc gọi trực tiếp đối tượng sẽ sử dụng__repr__.
Quy tắc thực hành:
Bài viết này được đăng tại [free tuts .net]
Nếu chỉ định nghĩa một phương thức, hãy bắt đầu với __repr__.
Một mẹo nhỏ:
__repr__dành cho lập trình viên.__str__dành cho người dùng cuối.
Ví dụ minh họa
import datetime
today = datetime.datetime.now()
print("Sử dụng str():", str(today))
# Kết quả: '2021-08-12 20:17:04.066084'
print("Sử dụng repr():", repr(today))
# Kết quả: 'datetime.datetime(2021, 8, 12, 20, 17, 4, 66084)'
print("Sử dụng print():")
print(today) # __str__ được gọi
# Kết quả: '2021-08-12 20:17:04.066084'
print("Gọi trực tiếp đối tượng:")
today # __repr__ được gọi
# Kết quả: 'datetime.datetime(2021, 8, 12, 20, 17, 4, 66084)'
Phân tích:
__str__: Hiển thị thông tin ngày giờ dưới dạng chuỗi dễ hiểu.__repr__: Hiển thị thêm thông tin kỹ thuật, bao gồm tên module và các tham số tạo đối tượng.
Lưu ý:
Khi thiết kế lớp của riêng bạn, hãy đảm bảo rằng __repr__ cung cấp đủ thông tin để có thể tái tạo đối tượng, còn __str__ tập trung vào việc hiển thị thông tin thân thiện cho người dùng.
Kết bài

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng