Python 的方法解析順序(MRO, Method Resolution Order) 是指在多重繼承中,Python 用來確定調用哪個父類的方法或屬性的規則和順序。這是 Python 處理多重繼承時的一個核心機制,確保方法調用不會混亂且遵循一致的邏輯。Python 使用 C3 線性化算法 來解析多重繼承中的方法調用順序。
你可以使用 ClassName.mro()
或 help(ClassName)
查看 MRO。
如果不知道什麼是多重繼承
可先閱讀此篇Python 物件導向編程(Object-Oriented Programming, OOP): Class
class A:
def action(self):
print("Action from A")
class B(A):
def action(self):
print("Action from B")
class C(A):
def action(self):
print("Action from C")
class D(B, C):
pass
print(D.mro())
輸出:
[<class '__main__.D'>,
<class '__main__.B'>,
<class '__main__.C'>,
<class '__main__.A'>, <class 'object'>]
可以使用 super() 調用特定父類別的方法:
class Parent1:
def action(self):
print("Parent1 action")
class Parent2:
def action(self):
print("Parent2 action")
class Child(Parent1, Parent2):
def action(self):
print("Child action")
super(Parent1, self).action() # 調用 Parent2 的方法
child = Child()
child.action()
輸出:
Child action
Parent2 action
多重繼承是一種強大的功能,可以組合不同的父類別特性。但由於可能帶來方法解析的複雜性和命名衝突,使用時需要謹慎設計類別結構。
Python 物件導向編程(Object-Oriented Programming, OOP