1. 程式人生 > >3 條件控制和迴圈語句&函式&面向物件程式設計&模組&包&檔案和異常

3 條件控制和迴圈語句&函式&面向物件程式設計&模組&包&檔案和異常

  1. 繼承:程式中當我們定義一個class的時候,可以從某個現有的class繼承,新的class稱之為子類(Subclass),而被繼承的class稱之為基類、父類或超類;子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法
  2. class 子類(父類): def __init__(self,...):super(子類,self).__init__(...);子類的方法自動繼承
  3. 多繼承:class 子類(父類1,父類2,...):def __init__(self,...):super().__init__(...);如果繼承的父類中有相同的方法名,而在子類中使用時未指定,python將從左至右查詢父類中是否包含方法
  4. super(子類,self),找到子類的父類,把self傳遞給父類,再呼叫父類下面的__init__()或其他方法,把相應的引數傳遞給父類
    1. super 是用來解決多重繼承的方法呼叫問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序(MRO);
    2. MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表
    3. 一般類的多繼承程式碼,主要通過父類名呼叫初始化方法:父類.__init__(self)
  5. 重寫:在子類中重新定義父類同名方法
  6. *在python3中所有的類都是新式類,所有類預設繼承object;搜尋方式是採用“廣度優先”的方式去查詢屬性(多繼承呼叫方法從左至右,就近原則,一層父類有的方法不需要去上一層父類中查詢;呼叫屬性/初始化方法從右至左,廣度優先),當一個子類多繼承,且部分父類繼承於同一個類,初始化方法會逆序列印,先執行廣度較大的父類
    1. 子類.__mro__列印方法解析順序,廣度表
    2. 子類.__bases__列印直接父類
  7. *同級.py檔案類繼承:class 子類(檔名.父類)