python 繼承的規則

本文講述python繼承規則。

先來看一些概念:

面向對象的概念
簡單地說 面向對象編程(Object Oriented Programming)簡稱OOP 就是使我們分析、設計 和實現一個系統的方法儘可能地接近我們認識一個系統的方法。
1、描述對象之間的相互作用 。
2、面向對象的方法包括,面向對象的分析(OOA, Object-Oriented Analysis) 、
面向對象的設計(OOD, Object-Oriented Design)、面向對象的程序設計(OOP, Object-Oriented Program) 。
3、面向對象技術主要圍繞以下幾個概念,對象、抽象數據類型、類、類型層次(子類)、繼承性、多態性。

對比:

面向過程
過程化設計先確定算法,再確定數據結構;面向過程的程序員習慣於建立數據結構存放數 據並定義方法(函數)來操作數據;

面向對象
面向對象編程先確定數據結構,再確定算法;而面向對象程序員則構造對象模型,將數據 與方法組織在一起。
面向對象程序設計方法的優點 可重用性 可擴展性 可管理性

抽象 :對具體問題(對象)進行概括,抽出這一類對象的 公共性質並加以描述的過程。要求:先注意問題的本質及描述,其次是實現過程或細節。

數據抽象—描述某類對象的屬性或狀態(對象相互區別的 物理量)
代碼抽象—描述某類對象的共有的行爲特徵或具有的功 能。

類:是描述對象的“基本原型”,它定義一類對象所能擁有的數 據和能完成的操作。
在面向對象的程序設計中,類是程序的基本單元。相似的對象可以歸併到同一個類中去,就像傳統語言中的 變量與類型關係一樣。

從程序設計的角度看,類是面向對象程序中最基本的程序單元,類實質上定義的是一種數 據類型,這種數據類型就是對象類型,我們可以使用類名稱來聲明對象變量。

對象 :它是具有該類類型的一個特定的個體,是類的一個 變量。

對象的構造過程 :1.爲對象開闢空間; 2.調用構造方法初始化; 3.返回對象的引用。

類是對象的模板,同一個類可以創建多個對象,每個對象 有各自的內存空間,不會互相影響

默認情況下,Python中的成員函數和成員變量都是公開的(public),在python中沒有類似public,private等關鍵詞來修 飾成員函數和成員變量。

在python中定義私有變量只需要在變量名或函數名前加 上 ”__“兩個下劃線,那麼這個函數或變量就是私有的了。

1、_xxx "單下劃線 " 開始的成員變量叫做保護變量,意思是隻有類實例和子類實例能訪問到這些變量。
2、__xxx 類中的私有變量/方法名 (Python的函數 也是對象,所以成員方法稱爲成員變量也行得通。), " 雙下劃線 " 開始的是私有成員,意思是隻有類對象自己 能訪問,連子類對象也不能訪問到這個數據。
3、)__xxx__ 系統定義名字,前後均有一個“雙下劃線” 代表python裏特殊方法專用的標識,如 __init__()代表 類的構造函數

封裝:行爲和屬性的結合。

含義:提供將所抽象出的問題的屬性(數據成員)和行爲 (代碼成員)相組合的一種機制,它能將這二類成員再組 合在一起,形成對象或實體。

目的:增強使用的安全性,使用者不必瞭解具體的實現細 節,而只需要通過設計者提供的外部接口來操作它。 優點:實現高度模塊化,從而產生出軟件構件(控件); 利用控件快速地組裝程序。 客戶可以調用一個並不瞭解內部機制的對象的方法 任何關於內部的改動對客戶來說都是隱藏的。

繼承:繼承是由已有的類創建新類的機制。由繼承得到的類稱爲子類(派生類),被繼承的類稱爲父類 (超類)(基類)。

繼承的原則 :
1、子類繼承父類的成員變量和成員方法
2、子類不繼承父類的構造方法,能夠繼承父類的析構方法
3、子類不能刪除父類的成員,但可以重定義父類成員
4、子類可以增加自己的成員

繼承的作用 :
1、實現軟件可重用的重要方式
2、增強軟件可擴充性
3、提高軟件的可維護性

面向對象中的兩個重要概念:抽象和分類。

抽象和分類是人們認識世界的基本方法:

抽象是將現實世界中客觀存在的事務映射到意識中的一種 方法。
分類是指確定這些抽象到意識中的概念之間的關係。
這些關係的基本形式包括一般到特殊和整體與局部。

在面向對象中,一般到特殊的關係用繼承(Inheritance)表 示;整體與局部的關係用組合(composition)表示。(在之前的博客中也將到這個問題)

Super()用法 :
1、super()用來引用當前對象的父類,用super()可以實現對 父類成員的訪問。
訪問父類被隱藏的成員變量,如: super().variable
2、調用父類中被覆蓋的方法,如: super().Method([paramlist])
3、調用父類的構造函數,如: super().__init__([paramlist])

多態 :
一個對象在不同的情況下,具有不同的形態,用於強類型語言。是使用在繼承和接口中實現。
多態:定義時的類型和運行時的類型不一樣,此時就成爲多態
python中的多態主要得益於python的鴨子類型,之前的博客中講過,這裏不再多說。

多態的作用: 提高程序的擴展性

實例屬性,類屬性/方法,靜態方法 :
類屬性 :直接在類中定義的,與方法平齊,不在方法裏的屬性就是類屬性
實例屬性 :在方法裏通過self.屬性都是實例屬性 。

類屬性就是類對象所擁有的屬性,它被所有類對象的實例對象所共有,在內存中只存在一個副本,這個和C++中類的靜態成員變量有點類似。

對於公有的類屬性,在類外可以通過類對象和實例對象訪 問。

類方法 :是類對象所擁有的方法,需要用修飾器@classmethod。
(註解、元數據)來標識其爲類方法,對於類方法,第一 個參數必須是類對象,一般以cls作爲第一個參數(當然可 以用其他名稱的變量作爲其第一個參數,但是大部分人都 習慣以’cls‘作爲第一個參數的名字,就最好用’cls'了),能 夠通過實例對象和類對象去訪問。

靜態方法 :
需要通過修飾器@staticmethod來進行修飾,靜態方法不 需要多定義參數。
從類方法和實例方法以及靜態方法的定義形式就可以看出 來, 類方法的第一個參數是類對象cls,那麼通過cls引用的必定 是類對象的屬性和方法;

而實例方法的第一個參數是實例對象self,那麼通過self引 用的可能是類屬性、也有可能是實例屬性(這個需要具體 分析),不過在存在相同名稱的類屬性和實例屬性的情況 下,實例屬性優先級更高。

靜態方法中不需要額外定義參數,因此在靜態方法中引用 類屬性的話,必須通過類對象來引用。

總結 :
方法是代碼重用的重要手段,控制好代碼被訪問的程度 可以加強代碼的安全性, 封裝、繼承和多態是面向對象的基本特徵 ,封裝特性通過訪問權限的設定將類的實現細節隱藏,提供 接口供外部訪問 ,繼承和組合是類間的基本關係,是軟件複用的重要方法 ,多態是面向對象的重要標誌。
————————————————
版權聲明:本文爲CSDN博主「MZP_man」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/MZP_man/article/details/100029713

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章