1. 程式人生 > >Python3中MRO的含義及MRO演算法的繼承順序

Python3中MRO的含義及MRO演算法的繼承順序

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'>)