封裝、繼承和多態


面向對象三大特性:

  1. 封裝 根據 職責 將 屬性 和 方法 封裝 到一個抽象的 類 中
  2. 繼承 實現代碼的重用,相同的代碼不需要重復的編寫
  3. 多態 不同的對象調用相同的方法,產生不同的執行結果,增加代碼的靈活度

面向對象三大特性:

  1. 封裝 根據 職責 將 屬性 和 方法 封裝 到一個抽象的 類 中
  2. 繼承 實現代碼的重用,相同的代碼不需要重復的編寫
  3. 多態 不同的對象調用相同的方法,產生不同的執行結果,增加代碼的靈活度
class 類名(父類名):

    pass

當 父類 的方法實現不能滿足子類需求時,可以對方法進行重寫(override)
重寫 父類方法有兩種情況:

  1. 覆蓋 父類的方法:父類的方法實現 和 子類的方法實現完全不同
    具體的實現方式,就相當於在 子類中 定義了一個 和父類同名的方法並且實現。
  2. 對父類方法進行 擴展:子類的方法實現 中 包含 父類的方法實現
    在子類中 重寫 父類的方法;在需要的位置使用 super().父類方法 來調用父類方法的執行代碼;其他的位置針對子類的需求,編寫 子類特有的代碼實現。
關於 super
  • 在 Python 中 super 是一個 特殊的類
  • super()就是使用 super 類創建出來的對象
  • 最常 使用的場景就是在 重寫父類方法時,調用 在父類中封裝的方法實現

因為:調用父類方法的另外一種方式:在 Python 2.x 時,如果需要調用父類的方法,還可以使用以下方式:父類名.方法(self)。目前在 Python 3.x 還支持這種方式,但不推薦使用,因為一旦 父類發生變化,方法調用位置的 類名 同樣需要修改。

父類的 私有屬性 和 私有方法

子類對象 不能 在自己的方法內部,直接 訪問 父類的 私有屬性 或 私有方法
子類對象 可以通過 父類 的 公有方法 間接 訪問到 私有屬性 或 私有方法

  • 私有屬性、方法 是對象的隱私,不對外公開,外界 以及 子類 都不能直接訪問
  • 私有屬性、方法 通常用於做一些內部的事情

3.1.2 多繼承

子類 可以擁有 多個父類,並且具有 所有父類 的 屬性 和 方法,例如:孩子 會繼承自己 父親 和 母親 的 特性。

class 子類名(父類名1, 父類名2...):
    pass
新式類與舊式(經典)類
  • 新式類:以 object 為基類的類,推薦使用
  • 經典類:不以 object為基類的類,不推薦使用
  • 在 Python 3.x 中定義類時,如果沒有指定父類,會 默認使用 object作為該類的 基類 —— Python 3.x 中定義的類都是 新式類,在 Python 2.x 中定義類時,如果沒有指定父類,則不會以 object 作為 基類。
  • 為了保證編寫的代碼能夠同時在 Python 2.x 和 Python 3.x 運行!今后在定義類時,如果沒有父類,建議統一繼承自 object:
class 類名(object): pass 

object 是 Python 為所有對象提供的 基類,提供有一些內置的屬性和方法,可以使用 dir(object) 函數查看。


3.2 多態

面向對象三大特性:

  1. 封裝 根據 職責 將 屬性 和 方法 封裝 到一個抽象的 類 中
    • 定義類的准則
  2. 繼承 實現代碼的重用,相同的代碼不需要重復的編寫
    • 設計類的技巧
    • 子類針對自己特有的需求,編寫特定的代碼
  3. 多態 不同的 子類對象 調用相同的 父類方法,產生不同的執行結果
    • 增加代碼的靈活度
    • 以 繼承 和 重寫父類方法 為前提
    • 調用方法的技巧,不會影響到類的內部設計

多態 更容易編寫出出通用的代碼,做出通用的編程,以適應需求的不斷變化!




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM