Nạp chồng toán tử: so sánh đối tượng

Nhập môn Lập trình Hướng đối tượng với Python

George Boorman

Curriculum Manager, DataCamp

So sánh đối tượng

class Customer:
    def __init__(self, name, balance):
        self.name, self.balance = name, balance  

customer1 = Customer("Maryam Azar", 3000)
customer2 = Customer("Maryam Azar", 3000)

# Check for equality customer1 == customer2
False
Nhập môn Lập trình Hướng đối tượng với Python

Tính bằng nhau của đối tượng

class Customer:
    def __init__(self, name, balance, acc_id):
        self.name, self.balance = name, balance
        self.acc_id = acc_id    

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)

customer1 == customer2
False
Nhập môn Lập trình Hướng đối tượng với Python

Biến là tham chiếu

customer_one = Customer("Maryam Azar", 3000, 123)
customer_two = Customer("Maryam Azar", 3000, 123)

print(customer_one)
<__main__.Customer at 0x1f8598e2e48>
print(customer_two)
<__main__.Customer at 0x1f8598e2240>
  • print() đầu ra đề cập đến khối bộ nhớ mà biến được gán vào
  • == so sánh các tham chiếu, không phải dữ liệu
Nhập môn Lập trình Hướng đối tượng với Python

So sánh tùy chỉnh

# Two different lists containing the same data
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Nhập môn Lập trình Hướng đối tượng với Python

Phương thức __eq__()

  • __eq__() được gọi khi 2 đối tượng của một lớp được so sánh bằng ==
  • Chấp nhận 2 đối số, selfother - các đối tượng để so sánh
  • Trả về một Boolean
Nhập môn Lập trình Hướng đối tượng với Python

Phương thức __eq__()

class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = acc_id, name

# Will be called when == is used def __eq__(self, other):
# Printout print("__eq__() is called") # Returns True if all attributes match return (self.acc_id == other.acc_id) and (self.name == other.name)
Nhập môn Lập trình Hướng đối tượng với Python

So sánh các đối tượng

# Two equal objects
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Two unequal objects - different ids
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Nhập môn Lập trình Hướng đối tượng với Python

Kiểm tra kiểu dữ liệu

  • Nếu hai đối tượng thuộc các lớp khác nhau có cùng thuộc tính và giá trị thì sao?
    • Python sẽ đánh giá chúng là bằng nhau
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Returns True if the objects have the same attributes
        # and are of the same type
        return (self.acc_id == other.acc_id) and (self.name == other.name)\n            and (type(self) == type(other))
Nhập môn Lập trình Hướng đối tượng với Python

Các toán tử so sánh khác

Toán tử Phương thức
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Tùy chỉnh bằng cách định nghĩa trong một lớp
Nhập môn Lập trình Hướng đối tượng với Python

Hãy luyện tập!

Nhập môn Lập trình Hướng đối tượng với Python

Preparing Video For Download...