Kế thừa Python OOP: Lớp cha và con

Tìm hiểu tính kế thừa trong Python OOP. Phân lớp chính, các phương thức ghi đè, sử dụng super() và nhiều mẫu kế thừa.

Thử trong Trình chỉnh sửa

Tổng quan

Kế thừa là một trong những trụ cột nền tảng của Lập trình hướng đối tượng (OOP). Đó là một cơ chế cho phép một lớp mới (được gọi là lớp con hoặc lớp con) tiếp nhận các thuộc tính và phương thức của một lớp hiện có (được gọi là lớp cha hoặc lớp cha). Mẫu thiết kế này thúc đẩy việc tái sử dụng mã, giảm sự dư thừa và thiết lập các mối quan hệ logic, phân cấp giữa các thành phần khác nhau trong ứng dụng của bạn.

Để triển khai tính kế thừa trong Python, bạn chuyển tên lớp cha bên trong dấu ngoặc đơn khi định nghĩa lớp con: `class Child(Parent):`. Lớp con kế thừa ngay lập tức tất cả các phương thức và biến của lớp cha. Nếu đứa trẻ cần hành vi tùy chỉnh, nó có thể ghi đè bất kỳ phương thức cha mẹ nào bằng cách xác định lại nó có cùng tên. Bên trong một phương thức được ghi đè, bạn vẫn có thể gọi cách triển khai của cha mẹ bằng cách sử dụng hàm `super()` tích hợp sẵn, đảm bảo bạn có thể mở rộng thay vì thay thế hoàn toàn logic hiện có.

Không giống như nhiều ngôn ngữ được gõ tĩnh, Python vốn hỗ trợ Đa kế thừa, nghĩa là một lớp con có thể kế thừa từ nhiều lớp cha (ví dụ: `class SmartDevice(Camera, Phone):`). Để giải quyết phương thức cha nào sẽ thực thi khi xung đột tên, Python sử dụng một thuật toán nghiêm ngặt được gọi là Thứ tự phân giải phương thức (MRO). Hiểu cách cấu trúc cây kế thừa và sử dụng super() là rất quan trọng để thiết kế các kiến ​​trúc hướng đối tượng có thể mở rộng.

Đầu ra mã & thực thi

Tạo lớp Xe cha và lớp con Xe con ghi đè việc khởi tạo bằng cách sử dụng super().

class Vehicle:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

    def display_info(self):
        return f"{self.year} {self.brand}"

class Car(Vehicle):
    def __init__(self, brand, year, model):
        # Call parent constructor
        super().__init__(brand, year)
        self.model = model

    def display_info(self):
        # Override parent method and extend it
        parent_info = super().display_info()
        return f"{parent_info} {self.model}"

my_car = Car("Ford", 2026, "Mustang")
print(my_car.display_info())
Đầu ra thiết bị đầu cuối
2026 Ford Mustang

Triển khai từng bước

  • Tạo các lớp ngoại lệ tùy chỉnh kế thừa từ Ngoại lệ
  • Xây dựng các thành phần giao diện người dùng (như Nút) kế thừa từ Chế độ xem chung
  • Xác định các mô hình cơ sở dữ liệu phân cấp (ví dụ: Người dùng, Nhân viên, Người quản lý)

Câu hỏi thường gặp

Super() làm gì trong phân lớp?

super() trả về một đối tượng tạm thời của lớp cha, cho phép bạn gọi các phương thức của nó, điều này đặc biệt hữu ích để khởi tạo các trường cha trong __init__.

Bạn có thể ngăn chặn một lớp được kế thừa không?

Python không hỗ trợ từ khóa “cuối cùng” như Java để hạn chế tính kế thừa. Thông thường, chúng tôi ghi lại ý định của lớp hoặc sử dụng trình kiểm tra loại với chú thích @final từ mô-đun đánh máy.

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.