INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và Class
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Kế thừa trong Python

Trong bài này mình sẽ giải thích sâu hơn về kế thừa trong Python, nhất là kế thừa liên quan đến các mức độ truy cập private / protected và public trong Python.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong lập trình hướng đối tượng Python thì tính kế thừa rất quan trọng, nó giúp bạn thiết kế cấu trúc ứng dụng một cách khoa học, phân chia các lớp một cách tối ưu, lớp này có thể tái sử dụng dữ liệu của lớp khác.

1. Kế thừa trong Python là gì?

Kế thừa (Inheritance) là việc một lớp được khai báo kế thừa toàn bộ thuộc tính và phương thức của một lớp khác. Lớp được kế thừa ta gọi là lớp con, và lớp kế thừa ta gọi là lớp cha.

Lớp con có thể sử dụng toàn bộ dữ liệu khai báo ở mức độ protected public ở lớp cha. Riêng với private thì không được, vì đó là mức độ bảo mật cao nhất, chỉ sử dụng bên trong nội bộ của lớp cha.

Bài viết này được đăng tại [free tuts .net]

Nếu bạn chưa biêt về ba mức độ này thì hãy quay lại bài viết class trong Python để đọc nhé.

Cách khai báo kế thừa:

class lopCha:
    # Code của lớp cha

class lopCon(lopCha):
    # Code của lớp con

Ví dụ: Khao báo lớp XeDap kế thừa từ lớp Xe.

class Xe:
    # Code ...

class XeDap(Xe):
    # Code ...

Phần này bạn chỉ cần hiểu khái niệm và cú pháp thôi nhé, còn chi tiết cách dùng kế thừa trong Python thì chúng ta sẽ học ở những phần tiếp theo dưới đây.

2. Kế thừa thuộc tính và phương thức của lớp cha

Trong kế thừa Python thì đặc điểm hay nhất là lớp con co thể sử dụng dữ liệu của lớp cha, trừ trường hợp dữ liệu đó là private.

Ví dụ 1: Sử dụng thuộc tính của lớp cha

class Xe:
    name = 'Đây là tên xe'

class XeDap(Xe):
    def showName(self):
        # sử dụng thuộc tính name của lớp cha
        print(self.name)

# Cách dùng
d = XeDap()
d.showName()

Kết quả:

ket qua 1 JPG

Ví dụ 2: Sử dụng phương thức của lớp cha

class Xe:
    name = ''
    def setName(self, name):
        self.name = name

class XeDap(Xe):
    def showName(self, name):
        # Sử dụng phương thức của lớp cha
        self.setName("Xe đạp")

        # sử dụng thuộc tính name của lớp cha
        print(self.name)

# Cách dùng
d = XeDap()
d.showName("Xe đạp")

Kết quả:

ket qua 2 JPG

3. Kế thừa trong Python với hàm khởi tạo

Hàm khởi tạo trong Python sẽ được tự động gọi mỗi khi bạn tạo mới đối tượng. Nếu là class đơn thì quá dễ, trường hợp class có kế thừa thì câu hỏi đặt ra như sau:

Nếu cả lớp cha và lớp con đều có hàm khởi tạo thì Python sẽ sử dụng hàm nào?

Theo mức độ ưu tiên thì Python sẽ chạy hàm khởi tạo ở lớp con nhé các bạn.

class Xe:
    def __init__(self):
        print("Hàm khởi tạo lớp cha")

class XeDap(Xe):
    def __init__(self):
        print("Hàm khởi tạo lớp con")

# Cách dùng
d = XeDap()

Kết quả:

ket qua 3 JPG

Nếu bạn muốn chạy hàm khởi tạo của lớp cha thì hãy gọi nó ở lớp con thông qua hàm supper() nhé.

class Xe:
    def __init__(self):
        print("Hàm khởi tạo lớp cha")

class XeDap(Xe):
    def __init__(self):
        # Gọi hàm khởi tạo lớp cha
        super().__init__()

        print("Hàm khởi tạo lớp con")

# Cách dùng
d = XeDap()

Kết quả:

ket qua 4 JPG

Hoặc bạn cũng có thể sử dụng thông qua tên của lớp cha như ví dụ dưới đây.

class Xe:
    def __init__(self):
        print("Hàm khởi tạo lớp cha")

class XeDap(Xe):
    def __init__(self):
        # Gọi hàm khởi tạo lớp cha
        Xe.__init__(self)

        print("Hàm khởi tạo lớp con")

# Cách dùng
d = XeDap()

Trên là cách sử dụng tính kế thừa trong Python nói chung và trong lâp trình hướng đối tương Python nói riêng. Bài này mình sẽ dừng ở đây, bài tiếp theo chúng ta sẽ tìm hiểu đa kế thừa trong Python nhé.

Cùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top