Các ví dụ mô hình hóa dữ liệu Python (phần 5)

Phương thức __repr__ cho in ra một object trong IDLE

Bạn có thể nhận thấy rằng khi bạn nhập một tham chiếu biến đơn giản tới một dạng mới của object trong IDLE shell,
Python in ra một notation lạ trong cặp dấu ngoặc nhọn. Notation này là khác so với trình bày string của object
như định nghĩa trong phương thức __str__ của nó, cái hàm print của Python tự động sử dụng khi bạn gọi print với
object như một đối số. Phiên làm việc tiếp theo minh họa sự khác nhau với một vài thực thể của class Rational:

>>> oneThird = Rational(1, 3)
>>> oneEighth = Rational(1, 8)
>>> print(oneThird) # print calls str(oneThird)
1/3
>>> oneThird # No automatic call of str here
<__main__.Rational object at 0x103ea7880>
>>> print(oneThird + oneEighth)
11/24
>>> oneThird + oneEighth
<__main__.Rational object at 0x103ea6f50>

Sự khác nhau này bình thường không là một vấn đề cho hầu hết sử dụng object, nhưng trong các trường hợp của tương
tác với các dạng mới của các số như Rational, nó sẽ là hữu dụng để xem trình bày string sử dụng phổ biến của chúng
trong IDLE mà không phải gọi hàm print để giành nó. Bạn có thể làm cái này bằng cách thêm một phương thức tên __repr__
vào định nghĩa class (tên là viết tắt cho “read/evaluate/print,”, cái tham chiếu đến quá trình cái IDLE thực thi
khi bạn nhập một biểu thức Python trong môi trường của nó). Phương thức này đơn giản trả về kết quả của việc gọi
str với self, như sau:

def __repr__(self):

“””Returns the string rep for IDLE’s printing.”””
return str(self)

Tương tác trong IDLE với các số hữu tỷ bây giờ giống chặt chẽ hơn cái đó với các số dấu phẩy động và số nguyên:

>>> oneThird = Rational(1, 3)
>>> oneEighth = Rational(1, 8)
>>> oneThird # It’s automatic now!
1/3
>>> oneThird + oneEighth
11/24
>>> oneThird + Rational(1, 2) + oneEighth # 1/3 + 1/2 + 1/8
23/24

Chia sẻ