Nạp chồng toán tử so sánh bằng
Khi so sánh hai đối tượng của một lớp tùy chỉnh bằng ==, mặc định Python chỉ so sánh tham chiếu đối tượng, không phải dữ liệu bên trong. Để ghi đè hành vi này, lớp có thể triển khai phương thức đặc biệt __eq__(), nhận hai đối số — là các đối tượng cần so sánh — và trả về True hoặc False. Phương thức này sẽ được gọi ngầm khi hai đối tượng được so sánh.
Lớp BankAccount từ chương trước đã có sẵn trong khung mã. Lớp có một thuộc tính balance và phương thức withdraw(). Hai tài khoản ngân hàng có cùng số dư không nhất thiết là cùng một tài khoản, nhưng một tài khoản ngân hàng thường có số tài khoản, và hai tài khoản có cùng số tài khoản nên được xem là như nhau.
Bài tập này là một phần của khóa học
Lập trình hướng đối tượng trong Python
Hướng dẫn bài tập
Hãy thử bôi đen đoạn mã ở dòng 1–7 và nhấn nút "Chạy mã". Sau đó thử tạo vài đối tượng BankAccount trong bảng điều khiển và so sánh chúng.
- Sửa phương thức
__init__()để nhận tham số mớinumbervà khởi tạo thuộc tínhnumbermới. - Định nghĩa phương thức
__eq__()trả vềTruenếu thuộc tínhnumbercủa hai đối tượng bằng nhau. - Quan sát các lệnh print và đầu ra trong bảng điều khiển.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
class BankAccount:
# MODIFY to initialize a number attribute
def __init__(self, balance=0):
self.balance = balance
def withdraw(self, amount):
self.balance -= amount
# Define __eq__ that returns True if the number attributes are equal
def ____(____, ____):
return ____.number == ____.____
# Create accounts and compare them
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)