1. 程式人生 > >python之旅六【第七篇】面向對象

python之旅六【第七篇】面向對象

封裝 過程 col self logs 分類 ges eric 使用

面向對象三大特性

  • 面向過程:根據業務邏輯從上到下寫壘代碼
  • 函數式:將某功能代碼封裝到函數中,日後便無需重復編寫,僅調用函數即可
  • 面向對象:對函數進行分類和封裝,讓開發“更快更好更強...

面向對象編程是一種編程方式,此編程方式的落地需要使用 “類” 和 “對象” 來實現,所以,面向對象編程其實就是對 “類” 和 “對象” 的使用。

  類就是一個模板,模板裏可以包含多個函數,函數裏實現一些功能

  對象則是根據模板創建的實例,通過實例對象可以執行類中的函數

一、什麽是類&對象

類:可以理解為他是一個模板,比如人們在說“人”這個名詞的時候,沒人知道這個“人”具體是指那個人!

對象:對象是一個實際的物體,他有自己的屬性和特征、行為的,比如alex和eric,當說到這兩個人的時候就會想到,alex很猥瑣、eric很悶騷他們的特征、動作啊都能具體的顯示出來!

二特性

封裝
繼承
多態(很少有用)

創建類和對象

 類就是一個模板,模板裏可以包含多個函數,函數裏實現一些功能

 對象則是根據模板創建的實例,通過實例對象可以執

行類中的函數

技術分享

  • class是關鍵字,表示類
  • 創建對象,類名稱後加括號即可
  • 類中的函數第一個參數必須是self
  • 類中定義的函數叫做 “方法”

封裝

封裝,顧名思義就是將內容封裝到某個地方,以後再去調用被封裝在某處的內容。

所以,在使用面向對象的封裝特性時,需要:

  • 將內容封裝到某處
  • 從某處調用被封裝的內容

第一步:將內容封裝到某處

技術分享

self 是一個形式參數,當執行 obj1 = Foo(‘wupeiqi‘, 18 ) 時,self 等於 obj1

當執行 obj2 = Foo(‘alex‘, 78 ) 時,self 等於 obj2

所以,內容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在內存裏類似於下圖來保存。

技術分享

第二步:從某處調用被封裝的內容

調用被封裝的內容時,有兩種情況:

  • 通過對象直接調用
  • 通過self間接調用

1、通過對象直接調用被封裝的內容

上圖展示了對象 obj1 和 obj2 在內存中保存的方式,根據保存格式可以如此調用被封裝的內容:對象.屬性名

技術分享
 1 class Foo:
 2  
 3     def __init__(self, name, age):
4 self.name = name 5 self.age = age 6 7 obj1 = Foo(wupeiqi, 18) 8 print obj1.name # 直接調用obj1對象的name屬性 9 print obj1.age # 直接調用obj1對象的age屬性 10 11 obj2 = Foo(alex, 73) 12 print obj2.name # 直接調用obj2對象的name屬性 13 print obj2.age # 直接調用obj2對象的age屬性
View Code

2、通過self間接調用被封裝的內容

執行類中的方法時,需要通過self間接調用被封裝的內容

技術分享
 1 class Foo:
 2   
 3     def __init__(self, name, age):
 4         self.name = name
 5         self.age = age
 6   
 7     def detail(self):
 8         print self.name
 9         print self.age
10   
11 obj1 = Foo(wupeiqi, 18)
12 obj1.detail()  # Python默認會將obj1傳給self參數,即:obj1.detail(obj1),所以,此時方法內部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18
13   
14 obj2 = Foo(alex, 73)
15 obj2.detail()  # Python默認會將obj2傳給self參數,即:obj1.detail(obj2),所以,此時方法內部的 self = obj2,即:self.name 是 alex ; self.age 是 78
View Code

綜上所述,對於面向對象的封裝來說,其實就是使用構造方法將內容封裝到 對象 中,然後通過對象直接或者self間接獲取被封裝的內容。

調用過程

技術分享

繼承

python之旅六【第七篇】面向對象