Python3中MRO的含義及MRO演算法的繼承順序
阿新 • • 發佈:2019-01-06
MRO(Method Resolution Order):方法解析順序。
Python語言包含了很多優秀的特性,其中多重繼承就是其中之一,但是多重繼承會引發很多問題,比如二義性,Python中一切皆引用,這使得他不會像C++一樣使用虛基類處理基類物件重複的問題,但是如果父類存在同名函式的時候還是會產生二義性,Python中處理這種問題的方法就是MRO。
如何檢視一個類中的方法繼承順序,可以直接打印出mro順序,見以下程式碼:
class Person(): name = "Felix" age = 18 def eat(self): print("Eat...") def drink(self): print("Drink...") def sleep(self): print("Sleep...") class Teacher(Person): def work(self): print("Work...") class Student(Person): def study(self): print("Study...") # 助教是學生中選取,具有老師的功能,也有學習的功能 class Tutor(Teacher, Student): pass t = Tutor() print(Tutor.__mro__)
輸出結果為mro順序
(<class '__main__.Tutor'>, <class '__main__.Teacher'>, <class '__main__.Student'>, <class '__main__.Person'>, <class 'object'>)