1. 程式人生 > >python面向對象開發的自我理解

python面向對象開發的自我理解

div cpn fmt 打開 ptp 以數據為中心 bsp 規則 構造

?詳細代碼理解可以參考

笨鳥教程博客:http://www.runoob.com/python3/python3-class.html


面向對象經常被提起,那到底什麽是面向對象呢?

它的基本概念:類,對象、實例,屬性,方法以及封裝、繼承、多態還有組合到底是什麽呢?

對象可以是世間萬物。

面向過程:它是以數據為中心,按照人的邏輯使用比如c語言代碼 處理數據來完成任務的過程。

比如把大象放入冰箱內總共分三步:

第一步:打開冰箱門;

第二步:把大象放進冰箱;

第三部:關上冰箱門。

可以看出這個邏輯潛在的含義是這些事都有人來做,你或我或某某來打開冰箱門,來放入大象,來關上冰箱門。

面向對象:是不以人完成事件步驟為主線,而是將世間萬物(對象,且是具有能動性的對象,具體來說就是包含數據特征即屬性和能力即方法(或稱函數))為主線,然後拼裝對象屬性及方法來完成任務。

還是把大象放入冰箱內。

此時可以以冰箱為對象,冰箱具有開門關門的數據(可以用0表示關門,1表示開門)即屬性。可以有開門關門的能力即方法(方法也稱函數)。這樣把大象放入冰箱就不是人去打開冰箱了,冰箱就相當於自動冰箱了,會開關門。人也可以看做是對象,有放大象進冰箱的方法。

以上的冰箱和人都是對象,那什麽是實例呢?

對象是抽象的概括的集合,像馬這個概念一樣,你找不到一個既黑又白既胖又瘦的馬,但你能找到白色的那頭馬,黑色的那頭馬,但這些馬又都屬於上面那個概念馬。所以對象是抽象的概念,實例就是具體化的對象。冰箱若是對象,那他的實例可以是海爾冰箱,可以是格力冰箱(不知道格力有沒有冰箱)等。

那屬性是什麽呢:

屬性其實是數據。方法其實是函數。類就是那個抽象的對象。

對象的屬性存在於類的內部,但在類的方法外。

實例的屬性放在類內部方法內或類外的實例下。分為私有和非私有屬性。私有實例屬性以雙下劃線開頭,只能定義在類內,在類外無法訪問到,即使你用 實例.__私有屬性 進行訪問也僅是在類外建立了一個實例下的屬性。因為類內的私有屬性一旦建立,python會在後臺給這個私有的實例屬性(當然在類內定義的,類外也無法建立)改名。所以你在實例中是無法訪問到類內的實例屬性的。其中self代表的就是實例的意思。

 1 #這是註釋行
 2 #下面是類內
 3 class 類1:
 4     類屬性1=1 #類屬性定義在類內,類方法外
5 類屬性2=2 6 __類屬性3="Tom" # 7 def __init__(self,a1,b1): #a,b 是實例1傳進來的參數,這是一個特殊的類方法,被稱為構造函數,一旦這個類1被創建一個實例會在後臺自動調用這個類構造方法。 8 self.實例屬性1=a1 #定義了一個實例屬性 9 self.__實例屬性2=b1 #雙下劃線開頭定義了一個私有的實例屬性, 它在類外訪問不到,定義好後python會把這個私有實例屬性在後臺改名 10 def 方法1(self): 11 self.實例屬性1=1 12 self.實例屬性2=2 13 14 def 方法2(self): 15 self.實例屬性1=1 16 self.實例屬性2=2 17 print(和為,self.實例屬性1+self.實例屬性2) #在類內使用實例屬性 18 print(類1的類屬性1:,類1.類屬性1,類1的類屬性2:,類1.類屬性2,) #類內使用類屬性,不管是類內還是類外,使用類屬性都是 類名.類屬性名 19 20 #下面是類外 21 if __name__==__main__: 22 實例1=類1(a,b)#類相當於一個模子,這個實例具有了這個類的所有非私有屬性和方法。 23 print(實例1.實例屬性1) #類外使用實例屬性,這個實例屬性1是構造函數中的實例屬性1,方法1和方法2中的實例屬性還不能用,因為還沒有調用這些方法,所有那些方法下的實例屬 24 #性不能用,但構造函數在由類創建實例時已經被自動調用 25 類1.類屬性2=4 #可以在類外修改類屬性,此後所有實例繼承的此類屬性值全部改變。 26 實例1.__實例屬性2=3 #此處試圖改變私有實例屬性,私有實例屬性無法在類外訪問,故此處相當於不合潛規則的新建了一個類外實例屬性,雖然不報錯,但一般不這麽做 27 實例1.實例屬性5=5 #可以這麽用,這是在實例下創建了一個實例屬性 28 實例1.方法2() #這是在類外調用類方法,self是默認形參數,實參可以沒有,故此處方法2參數沒寫。

怕您看不清,下面把圖奉上:

技術分享

對象存在於問題分析階段,轉化到代碼時定義的這個對象就被稱為類了。

技術分享

技術分享

技術分享

技術分享

技術分享

技術分享

python面向對象開發的自我理解