Kế thừa lớp

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

George Boorman

Curriculum Manager, DataCamp

Tái sử dụng mã nguồn

1. Ai đó đã làm rồi

  • Gói rất phù hợp cho chức năng cố định
  • OOP rất tuyệt để tùy chỉnh chức năng

logo của một số gói Python

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

Tái sử dụng mã nguồn

1. Ai đó đã làm rồi

2. KHÔ: Đừng lặp lại chính mình

các thành phần giao diện người dùng khác nhau

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

Tái sử dụng mã nguồn

1. Ai đó đã làm rồi

2. DRY: Đừng lặp lại chính mình

đừng sử dụng nhiều thành phần giao diện người dùng khác nhau

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

Kế thừa

$$\Large{\text{Chức năng lớp mới = Chức năng lớp cũ + bổ sung}}$$

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

Ví dụ về cấu trúc phân cấp

Lớp BankAccount

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

Ví dụ về cấu trúc phân cấp

SavingsAccount kế thừa từ BankAccount

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

Ví dụ về hệ thống phân cấp

CheckingAccount cũng kế thừa từ BankAccount

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

Ví dụ về cấu trúc phân cấp

CheckingAccount có phương thức withdraw đã được sửa đổi

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

Triển khai kế thừa lớp

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

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


# Class inheriting from BankAccount class SavingsAccount(BankAccount): pass
  • BankAccount: Lớp cha có chức năng đang được mở rộng/kế thừa
  • SavingsAccount: Lớp con/lớp phụ sẽ kế thừa chức năng và thêm nhiều hơn
Nhập môn Lập trình Hướng đối tượng với Python

Lớp con có tất cả dữ liệu của lớp cha

# Constructor inherited from BankAccount
savings_acct = SavingsAccount(1000)
type(savings_acct)
__main__.SavingsAccount
# Attribute inherited from BankAccount
savings_acct.balance
1000
# Method inherited from BankAccount
savings_acct.withdraw(300)
Nhập môn Lập trình Hướng đối tượng với Python

Quan hệ kế thừa “is-a”

A SavingsAccount là một BankAccount

(có thể có các tính năng đặc biệt)

savings_acct = SavingsAccount(1000)
isinstance(savings_acct, SavingsAccount)
True
isinstance(savings_acct, BankAccount)
True
acct = BankAccount(500)
isinstance(acct, SavingsAccount)
False
isinstance(acct, BankAccount)
True
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...