Lesson 18: Kế Thừa (Inheritance)

🎯 Mục Tiêu

  • Hiểu được trụ cột cực kì quan trọng của OOP nhằm Tái Sử Dụng Code (Code Reusability).
  • Biết cách tạo ra một Lớp Con bòn rút toàn bộ tinh hoa từ Lớp Cha.
  • Hiểu nguyên lý Ghi Đè (Method Overriding) – Kẻ hậu sinh khả uý!
  • Nắm bắt Cú pháp vàng super() để gọi linh hồn của Lớp Cha về làm việc.

Kế Thừa Là Gì?

Tưởng tượng bạn code một công ty: Lớp NhanVien, lớp KeToan, lớp LapTrinhVien. Cả 3 loại này đều Dùng chung một mớ kiến trúc: Có Tên, Tuổi, Mã NV, hàm Tính Lương cơ bản… Chẳng lẽ bạn coppy gõ lại mớ Code đó ở cả 3 thư mục? Sai bét!

Bạn chỉ cần tạo một Lớp Cha Tối Cao là NhanVien. Sau đó cho KeToan KẾ THỪA NhanVien. Thế là thư mục KeToan trắng trơn tự nhiên được nhượng lại toàn bộ kỹ năng của Cha làm của riêng mình!

Cú pháp ép buộc Kế Thừa: class LớpCon(LớpCha):

Triển Khai Kế Thừa Cơ Bản

Trò chơi Nông Trại:

# LỚP CHA TỐI CAO
class Animal:
    def __init__(self, name):
        self.name = name
        
    def an_uong(self):
        print(f"{self.name} đang ăn thức ăn.")

# LỚP CON 1: Con Mèo
class Cat(Animal):
    # Dù ở đây Cat trống không có thêm code nào...
    pass

# Tạo con mèo thử
meo_kitty = Cat("Kitty")
meo_kitty.an_uong() # Output: Kitty đang ăn thức ăn. (Xài hàm cướp được từ Cha).

Vận Công Gọi Lớp Cha – Hàm super()

Đời không đơn giản thế! Lớp Con Mèo cần có đặc tả riêng của nó (Ví dụ: Cha thì chỉ cần Tên, nhưng Mèo bắt buộc phải khai báo luôn Màu Lông). Làm sao để Viết hàm Khởi Tạo __init__ cho Mèo mà vẫn bắt Cha phụ giúp nạp cái Tên dùm? Đó là nhờ super().

class Animal:
    def __init__(self, name):
        # Trách nhiệm của Cha là Lấy Tên và dán nhãn bộ nhớ
        self.name = name

class Dog(Animal):
    # Khởi tạo Chó cần 2 tham số: Tên và Giống
    def __init__(self, name, breed):
        # Dùng siêu ma thuật super() để HỒI HƯỚNG cái "name" lên cho CHA xử lý dùm
        super().__init__(name) 
        
        # Con Chó tự giải quyết việc râu ria ở phân hệ Con
        self.breed = breed

Phản Nghịch (Method Overriding – Ghi Đè)

“Con hơn cha là nhà có phúc”. Nếu hàm của Lớp Cha Cổ Hủ viết chung chung, Lớp Con Bắt Buộc phải được tự viết lại hàm tên i hệt vậy để đè bẹp hàm cũ và định hình phong cách riêng.

class Animal:
    def tap_keu(self):
        print("Tiếng động vật bất kì: Ùm ùm!")

class Pig(Animal):
    # Khai báo lại TÊN HÀM GIỐNG HỆC CHA
    def tap_keu(self):
        print("Lợn Éc Éc đòi cám!") # Đã đè bẹp tiếng Ùm ùm thành công.

💡 Key Takeaways

  • Cú pháp class B(A) chứng minh B kế thừa gốc gác từ A. Mọi thứ A có B ĐỀU MẶC ĐỊNH CÓ SẴN mà không cần khai báo lại. Lượng Code tiết kiệm được phải tính bằng hàng triệu Dòng.
  • Bất kì lúc nào muốn tận dụng 1 phần xử lý Cũ của gia phả, gọi ngay super(). Nó đại diện cho đường dẫn trỏ thẳng lên Thằng Cha Gần Nhất để sử dụng đồ đạc nhà Cha.
  • Quá trình Ghi đè phương thức (Overriding) xảy ra cực mượt: Chủng loài Cha thì kêu Ùm Ùm (Tổng quát chung phỏng đoán), Nhánh tiến hoá Chó kêu Gâu gâu, Nhóm tiến hoá Mèo thì tiếng kêu đè lên thành Meo meo.

➡️ Bài Tiếp Theo Lesson 19 – Polymorphism (Đa Hình)

Leave a Reply

Your email address will not be published. Required fields are marked *