Bắt đầu ngayBắt đầu miễn phí

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

Xem khóa học

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ới number và khởi tạo thuộc tính number mới.
  • Định nghĩa phương thức __eq__() trả về True nếu thuộc tính number củ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)
    
Chỉnh sửa và Chạy Mã