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

Kiểm tra tính bằng nhau của lớp

Trong bài trước, bạn đã định nghĩa lớp BankAccount với thuộc tính number dùng để so sánh. Nhưng nếu bạn so sánh một đối tượng BankAccount với một đối tượng của lớp khác cũng có thuộc tính number, bạn có thể nhận được kết quả không như mong đợi.

Ví dụ, xét hai lớp sau


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

Chạy acct == pn sẽ trả về True, dù thực tế bạn đang so sánh một số điện thoại với một số tài khoản ngân hàng.

Thực hành tốt là kiểm tra lớp (class) của các đối tượng truyền vào phương thức __eq__() để đảm bảo phép so sánh có ý nghĩa.

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

Cả hai lớp PhoneBankAccount đều đã được định nghĩa. Hãy thử chạy mã hiện có bằng nút "Chạy mã" và xem đầu ra.

  • Sửa định nghĩa của BankAccount để chỉ trả về True nếu thuộc tính number giống nhau VÀ type() của cả hai đối tượng được truyền vào là như nhau.

Chạy mã và xem lại đầu ra.

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:
    def __init__(self, number, balance=0):
        self.number, self.balance = number, balance
      
    def withdraw(self, amount):
        self.balance -= amount 

    # MODIFY to add a check for the type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
Chỉnh sửa và Chạy Mã