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
|
|
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
Hướng dẫn bài tập
Cả hai lớp Phone và BankAccount đề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ềTruenếu thuộc tínhnumbergiố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)