大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第78篇文章,第三階段的課程:Python進階知識:類與對象(九);解決多繼承的「菱形問題」。
一、如何解決多繼承的問題
首先,一般情況下不建議使用多繼承;因為這樣不僅會使代碼可讀性變差,也很容易產生多繼承的深度優先與廣度優先問題;
假設:當一個子類有多個父類時,如果所有父類中都有變量X,而且父類的父類(祖父類)中也有變量X;那Python解釋器在讀取變量X的值時,是取父類A的值好還是取父類B的值好?
如圖:
這種情況下,Python解釋器是根據當前類的MRO列表順序進行查找;
所謂MRO列表是指:對於你定義的每一個類,不管有沒有繼承關係,Python都會計算出方法解釋順序列表【MRO】,該MRO列表就是一個簡單的所有基類線性順序列表;
列印類的MRO列表方法:類名.mro()。
二、使用Mixin機制解決多繼承的問題
Mixin機制的核心就是在多繼承的背景下儘可能提升多繼承的可讀性。
比如:在Python中是沒有常量的,但是我們默認名全部由大寫字母組成的變量就是常量,我們不會去修改它的值;這樣的話,雖然在Python語法層面並沒有常量出現,但在我們的認知中出現了變量;
所以在多繼承中,我們用Mixin這個詞來區別這個父類的情況,如果一個類繼承了多個父類,我們把將一些用來當作輔助功能的類名上添加上Mixin,表示表示這個父類是輔助的,
最後:說明一點Mixin是一種編程思想,並不是具體的Python語法。
以上是本期內容,如果有表達不對的內容,歡迎您的留言、斧正,我們一起天天向上。
感謝您的閱讀,您的三連【關注、點讚、收藏】就是對我最大的支持,謝謝!
本文由楊數Tos原創,歡迎關注,帶你一起長知識。