python之旅六【第七篇】面向對象
面向對象三大特性
- 面向過程:根據業務邏輯從上到下寫壘代碼
- 函數式:將某功能代碼封裝到函數中,日後便無需重復編寫,僅調用函數即可
- 面向對象:對函數進行分類和封裝,讓開發“更快更好更強...
面向對象編程是一種編程方式,此編程方式的落地需要使用 “類” 和 “對象” 來實現,所以,面向對象編程其實就是對 “類” 和 “對象” 的使用。
類就是一個模板,模板裏可以包含多個函數,函數裏實現一些功能
對象則是根據模板創建的實例,通過實例對象可以執行類中的函數
一、什麽是類&對象
類:可以理解為他是一個模板,比如人們在說“人”這個名詞的時候,沒人知道這個“人”具體是指那個人!
對象:對象是一個實際的物體,他有自己的屬性和特征、行為的,比如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):View Code4 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屬性
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 是 78View Code
綜上所述,對於面向對象的封裝來說,其實就是使用構造方法將內容封裝到 對象 中,然後通過對象直接或者self間接獲取被封裝的內容。
調用過程
繼承
python之旅六【第七篇】面向對象