So sánh kế thừa và biểu diễn chuỗi

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

George Boorman

Curriculum Manager, DataCamp

So sánh các đối tượng từ các lớp khác nhau

class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = acc_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

So sánh các đối tượng bằng kế thừa

Điều gì sẽ xảy ra nếu một đối tượng kế thừa từ lớp của đối tượng kia?

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

Tài khoản ngân hàng và tiết kiệm

SavingsAccount kế thừa từ BankAccount

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

__eq__ trong các lớp cha/con

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

    def withdraw(self, amount):
        self.balance -= amount 

    # Define __eq__ that returns True 
    # if the number attributes are equal 
    def __eq__(self, other):
        print("BankAccount __eq__() called")
        return self.number == other.number 
class SavingsAccount(BankAccount):
    def __init__(self, number, balance, interest_rate):
        BankAccount.__init__(self, number,
                             balance)
          self.interest_rate = interest_rate

    # Define __eq__ that returns True 
    # if the number attributes are equal 
    def __eq__(self, other):
        print("SavingsAccount __eq__() called")
        return self.number == other.number 
Nhập môn Lập trình Hướng đối tượng với Python

So sánh đối tượng cha và đối tượng con

ba = BankAccount(123, 10000)
sa = SavingsAccount(456, 2000, 0.05)
# Compare the two objects
ba == sa
SavingsAccount __eq__() called
False
sa == ba
SavingsAccount __eq__() called
False
Nhập môn Lập trình Hướng đối tượng với Python

In đối tượng

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

cust = Customer("Maryam Azar", 3000)
print(cust)
<__main__.Customer at 0x1f8598e2240>




a_list = [1,2,3]
print(a_list)
[1, 2, 3]
Nhập môn Lập trình Hướng đối tượng với Python

__str__()

  • print(obj), str(obj)
print(np.array([1,2,3]))
[1 2 3]
str(np.array([1,2,3]))
'[1 2 3]'
  • không trang trọng, dành cho người dùng cuối
  • strbiểu diễn

__repr__()

  • repr(obj), in ra trong console
repr(np.array([1,2,3]))
'array([1,2,3])'
np.array([1,2,3])
array([1, 2, 3])
  • trang trọng, dành cho nhà phát triển
  • reproducible representation
  • phương án dự phòng cho print()
Nhập môn Lập trình Hướng đối tượng với Python

Triển khai: repr

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

    def __repr__(self):

# Notice the '...' around name return f"Customer('{self.name}', {self.balance})"
cust = Customer("Maryam Azar", 3000) # Will implicitly call __repr__() cust
Customer('Maryam Azar', 3000)
Nhập môn Lập trình Hướng đối tượng với Python

Triển khai: str

class Customer:
    def __init__(self, name, balance):
        self.name = name
        self.balance = balance
    def __str__(self):
        cust_str = f"""
        Customer:
            name: {self.name}
            balance: {self.balance}
            """
        return cust_str
cust = Customer("Maryam Azar", 3000)

# Will implicitly call __str__()
print(cust)
Customer:
  name: Maryam Azar
  balance: 3000
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...