Python dainganxanh
  • Lời nói đầu
  • Chương I. SƠ LƯỢC
    • Bài 1. Cài đặt môi trường
    • Bài 2. Từ khóa và định danh
    • Bài 3. Câu lệnh, khối lệnh và chú thích
    • Bài 4. Nhập, xuất dữ liệu
    • Bài 5. Toán tử và lệnh gán
    • Bài 6. Biến, Hằng
    • Bài 7. Kiểu dữ liệu
    • Bài 8. Thao tác với tệp (cơ bản)
    • Bài 9. Tổng quan về Python
    • Bài tập chương 1
  • Chương II. RẼ NHÁNH - LẶP
    • Bài 10. Cấu trúc rẽ nhánh if…else
    • Bài 11. Cấu trúc lặp với for
    • Bài 12. Cấu trúc lặp với while
    • Bài 13. Lệnh break và continue
    • Bài tập chương 2
  • Chương III. HÀM & MODULE
    • Bài 14. Hàm
    • Bài 15. Tham số hàm
    • Bài 16. Đệ quy
    • Bài 17. Hàm ẩn danh
    • Bài 18. Biến toàn cục và cục bộ
    • Bài 19. Module
    • Bài 20. Package
  • Chương IV. KIỂU DỮ LIỆU
    • Bài 21. Dữ liệu kiểu số
    • Bài 22. Dữ liệu kiểu string
    • Bài 23. Dữ liệu kiểu list
    • Bài 24. Dữ liệu kiểu tuple
    • Bài 25. Dữ liệu kiểu set
    • Bài 26. Dữ liệu kiểu dictionary
  • Chương V. TỆP & THƯ MỤC
    • Bài 27. Đọc và ghi file
    • Bài 28. Quản lý file và folder
  • Chương VI. LỖI & NGOẠI LỆ
    • Bài 29. Ngoại lệ
    • Bài 30. Xử lý ngoại lệ
    • Bài 31. Xây dựng ngoại lệ
  • Chương VII. HƯỚNG ĐỐI TƯỢNG
    • Bài 32. Lập trình hướng đối tượng
    • Bài 33. Đối tượng và Lớp
    • Bài 34. Kế thừa
    • Bài 35. Đa kế thừa
    • Bài 36. Nạp chồng toán tử
  • Chương VIII. NGÀY - GIỜ
    • Python datetime
    • Python strftime()
    • Python strptime()
    • Current date and time
    • Get Current time
    • Timestamp to datetime
    • Python time Module
    • Python sleep()
  • Chương IX. CHỦ ĐỀ NÂNG CAO
    • Python Iterators
    • Python Generators
    • Python Closures
    • Python Decorators
    • Python @property decorator
    • Python RegEx
    • Python Examples
  • PHỤ LỤC - GHI CHÉP
    • Hàm map()
    • Cài Sublime Text để code Python
    • Ghi chép - ghi chú
    • Mảng 2 chiều
    • Công thức với dãy số
  • Tài liệu tham khảo
  • www.dainganxanh.com
  • 🐍Khóa học Python
  • 🤷‍♀️Hỏi đáp, chia sẻ (FG)
  • 🎮Sinh Test chấm Themis
Powered by GitBook
On this page
  • Đa kế thừa trong Python (Multiple Inheritance)
  • Kế thừa đa cấp trong Python (Multilevel Inheritance)
  • Thứ tự truy xuất phương thức (Method Resolution Order)

Was this helpful?

  1. Chương VII. HƯỚNG ĐỐI TƯỢNG

Bài 35. Đa kế thừa

Python Multiple Inheritance

PreviousBài 34. Kế thừaNextBài 36. Nạp chồng toán tử

Last updated 4 years ago

Was this helpful?

  • Ông cho cha kế thừa, cha cho con kế thừa thì con được kế thừa từ cả cha và ông.

  • Một "người" có thể được kế thừa trực tiếp từ nhiều "người".

Đa kế thừa trong Python (Multiple Inheritance)

Một lớp có thể được bắt nguồn từ nhiều hơn một lớp cơ sở (lớp cha) và như thế được gọi là đa kế thừa.

Trong đa kế thừa, các tính năng của tất cả các lớp cơ sở (lớp cha) được kế thừa vào lớp dẫn xuất (lướp con). Cú pháp của đa kế thừa tương tự như kế thừa đơn.

Ví dụ

class Lopcha1:
    pass

class Lopcha2:
    pass

class Lopcondakethua(Lopcha1, Lopcha2):
    pass

Biểu đồ minh họa đa kế thừa từ 2 class.

Multiple Inheritance in Python

Kế thừa đa cấp trong Python (Multilevel Inheritance)

We can also inherit from a derived class. This is called multilevel inheritance. It can be of any depth in Python.

Ta có thể kế thừa từ một lớp dẫn xuất (lớp con) và như vậy được gọi là kế thừa đa cấp. Kế thừa đa cấp không giới hạn bao nhiêu cấp.

Trong kế thừa đa cấp, các tính năng của lớp cơ sở và lớp dẫn xuất được kế thừa vào lớp dẫn xuất mới.

Ví dụ

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

Ở ví dụ này, lớp Derived1 có nguồn gốc từ lớp Cơ sở và lớp Derived2 có nguồn gốc từ lớp Derived1.

Thứ tự truy xuất phương thức (Method Resolution Order)

Mọi lớp trong Python đều có nguồn gốc từ lớp đối tượng. Nó là kiểu cơ sở nhất trong Python.

Vì vậy, về mặt kỹ thuật, tất cả các lớp khác, được tạo sẵn hoặc do người dùng định nghĩa, đều là các lớp dẫn xuất và tất cả các đối tượng là các thể hiện của lớp đối tượng.

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

# Output: True
print(isinstance("Hello",object))

Trong kịch bản đa kế thừa, 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í dụ đầu bài, lớp Lopcondakethua có thứ tự ưu tiên truy xuất như sau: [Lopcondakethua, Lopcha1, Lopcha2, object].

Để biết thứ tự truy xuất ta có thể dùng phương thức __mro__ hoặc mro(). __mro__ trả về một tuple còn mro() trả về một list

class Lopcha1:
    pass

class Lopcha2:
    pass

class Lopcondakethua(Lopcha1, Lopcha2):
    pass

print(Lopcondakethua.__mro__)    
print(Lopcondakethua.mro())

Output:

(<class '__main__.Lopcondakethua'>, 
<class '__main__.Lopcha1'>, 
<class '__main__.Lopcha2'>, 
<class 'object'>)

[<class '__main__.Lopcondakethua'>, 
<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.

# Demonstration of MRO

class X:
    pass

class Y:
    pass

class Z:
    pass

class A(X, Y):
    pass

class B(Y, Z):
    pass

class M(B, A, Z):
    pass

print(M.mro())

Output

[<class '__main__.M'>,
 <class '__main__.B'>,
 <class '__main__.A'>,
 <class '__main__.X'>,
 <class '__main__.Y'>,
 <class '__main__.Z'>,
 <class 'object'>]
Multilevel Inheritance in Python
Multiple Inheritance Visualization