Đa kế thừa (Multiple Inheritance) trong Python
Ở bài học trước chúng ta đã cùng tìm hiểu về Kế thừa trong lập trình hướng đối tượng của ngôn ngữ Python. Kế thừa cho phép chúng ta khai báo lớp mới sử dụng lại các hàm và thuộc tính của lớp cha cùng các chức năng mở rộng thêm. Trong bài viết này, Quantrimang sẽ tiếp tục bài học cùng chủ đề Kế thừa nhưng ở mức độ sâu sắc hơn, đó là Đa kế thừa và thứ tự truy xuất phương thức của các lớp cha (Method Resolution Order).

Đa kế thừa (Multiple Inheritance)
Giống như C++ thì trong Python một lớp có thể được định nghĩa từ nhiều lớp cha. Điều này được gọi là đa kế thừa.
Cú pháp:
class LopCha1:passclass LopCha2:passclass LopCon(LopCha1, LopCha2):pass

Lớp con đươc định nghĩa từ nhiều lớp cha và kế thừa đặc tính của cả hai lớp.
Các lớp cha có thể có các thuộc tính hoặc các phương thức giống nhau. Lớp con sẽ ưu tiên thừa kế thuộc tính, phương thức của lớp đứng đầu tiên trong danh sách thừa kế.
Kế thừa đa cấp (Multilevel Inheritance)
Ngoài việc có thể kế thừa từ các lớp cha, bạn còn có thể tạo lớp con mới kế thừa các lớp con trước đó. Đây gọi là kế thừa đa cấp (Multilevel Inheritance).
Với trường hợp này, các đặc tính của lớp cha và lớp con trước đó sẽ được lớp con mới kế thừa.
Cú pháp:
class LopCha:passclass LopCon1(LopCha):passclass LopCon2(LopCon1):pass

LopCon1 kế thừa LopCha, LopCon2 kế thừa LopCon1.
Thứ tự truy xuất phương thức (Method Resolution Order)
Class được bắt nguồn từ object. Trong kịch bản đa thừa kế, bất kỳ thuộc tính cần được truy xuất nào, đầu tiên sẽ được tìm kiếm trong lớp hiện tại. Nếu không tìm thấy, tìm kiếm tiếp tục vào lớp cha đầu tiên và từ trái qua phải.
Vậy thứ tự truy xuất sẽ là [LopCon, LopCha1, LopCha2, object].
Thứ tự này còn được gọi là tuyến tính hóa của LopCon và tập hợp các quy tắc được sử dụng để tìm thứ tự này được gọi là Thứ tự truy xuất phương thức (MRO).
Nói một cách dễ hiểu, MRO dùng để hiển thị danh sách/tuple các class cha của một class nào đó.
MRO được sử dụng theo hai cách:
- __mro__: trả về một tuple
- mro(): trả về một danh sách.
>>> LopCon.__mro__(<class '__main__.LopCon'>,<class '__main__.LopCha1'>,<class '__main__.LopCha2'>,<class 'object'>)>>> LopCon.mro()[<class '__main__.LopCon>,<class '__main__.LopCha1'>,<class '__main__.LopCha2'>,<class 'object'>]
Dưới đây là một ví dụ thừa kế phức tạp và hiển thị trực quan của nó cùng với MRO.

class X: passclass Y: passclass Z: passclass A(X,Y): passclass B(Y,Z): passclass M(B,A,Z): pass# Output:# [<class '__main__.M'>, <class '__main__.B'>,# <class '__main__.A'>, <class '__main__.X'>,# <class '__main__.Y'>, <class '__main__.Z'>,# <class 'object'>]
Xem thêm:
- Hơn 100 bài tập Python có lời giải (code mẫu)
- Trình thông dịch Python trực tuyến miễn phí
- Một số công cụ chạy Python trên Android
Bạn nên đọc
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:
Cũ vẫn chất
-

Các cách chuyển dữ liệu từ iPhone cũ sang iPhone mới
Hôm qua -

99+ stt chào ngày mới, lời chúc ngày mới tràn đầy năng lượng và thành công
Hôm qua -

Hiệu ứng chuyển động Animation trong CSS
Hôm qua -

Cách tạo kiểu chữ uốn cong trên Word
Hôm qua -

Cách kiểm tra tốc độ RAM, loại, dung lượng RAM
Hôm qua -

Các link nhập code Play Together
Hôm qua -

Cách ngừng cập nhật Windows trên PC
Hôm qua 18 -

Những điều bạn chưa biết về 26 loại Pokéball
Hôm qua -

Hàm VLOOKUP: Cách sử dụng và các ví dụ cụ thể
Hôm qua 9 -

Top 11 ứng dụng Auto Click cho Android không cần root
Hôm qua
Học IT
Công nghệ
Microsoft Word 2013
Microsoft Word 2007
Microsoft Excel 2019
Microsoft Excel 2016
Microsoft PowerPoint 2019
Google Sheets
Lập trình Scratch
Bootstrap
Hướng dẫn
Ô tô, Xe máy