Bí mật đằng sau kế thừa đa lớp trong Python: Method Resolution Order(MRO)
Bạn đã bao giờ tự hỏi điều gì sẽ xảy ra khi một class con kế thừa từ nhiều class cha mà các class cha này lại có cùng một method? 🤔 Python sẽ gọi method nào trước?

Đó chính là lúc Method Resolution Order (MRO) thể hiện sức mạnh của mình! 🦸
MRO là gì?
MRO là thứ tự mà Python tìm kiếm method hoặc thuộc tính trong hệ thống class. Nó đảm bảo rằng khi bạn gọi một method, Python sẽ biết chính xác method nào cần được thực thi, đặc biệt quan trọng trong trường hợp đa kế thừa.
Tại sao MRO quan trọng?
Khi chúng ta sử dụng đa kế thừa, có thể xảy ra xung đột tên method, MRO sẽ giải quyết những xung đột này một cách rõ ràng và nhất quán.
Python xử lý MRO như thế nào?
Python sử dụng một thuật toán gọi là C3 Linearization để xác định MRO. Về cơ bản, nó sẽ ưu tiên class con hơn class cha và đảm bảo rằng mỗi class chỉ được liệt kê một lần.
Ví dụ nhanh:
class A:
def hello(self):
print("Hello from A")
class B(A):
def hello(self):
print("Hello from B")
class C(A):
pass
class D(B, C):
pass
print(D.mro())
d = D()
d.hello() # Bạn đoán thử xem nó in ra gì?
Bạn có thể xem MRO của một class bằng cách dùng D.mro() hoặc D.__mro__.
Kết luận:
Hiểu rõ MRO sẽ giúp bạn viết code Python “chuẩn chỉnh” hơn, tránh được các lỗi khó hiểu khi làm việc với đa kế thừa.
Thử thách:
Hãy thử tạo một số class với đa kế thừa và xem MRO của chúng, bạn sẽ thấy nó thú vị đấy! 😉