Bài 35. Đa kế thừa
Python Multiple Inheritance
Last updated
Python Multiple Inheritance
Last updated
Ô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".
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.
Biểu đồ minh họa đa kế thừa từ 2 class.
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ụ
Ở 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.
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.
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
Output:
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.
Output