1.1封裝的定義
在程式設計中,封裝是對具體對象的一種抽象,即将某些部分隐藏起來,在程式外部看不到,其含義是其他程式無法調用。
要了解封裝,離不開“私有化”,就是将類或者是函數中的某些屬性限制在某個區域之内,外部無法調用。
1.2封裝的用處
封裝資料的主要原因是:保護隐私(把不想别人知道的東西封裝起來)
封裝方法的主要原因是:隔離複雜度
注意:在程式設計語言裡,對外提供的接口(接口可了解為了一個入口),就是函數,稱為接口函數,這與接口的概念還不一樣,接口代表一組接口函數的集合體。
1.3封裝的兩個層面
(1)類就是麻袋,這本身就是一種封裝
(2)類中定義私有的,隻有類的内部使用,外部無法通路
這種自動變形的特點:
1、類中定義的<code>__star</code>隻能在内部使用,如品<code>p1.__star</code>,引用的就是變形的結果。
2、這種變形其實正是針對外部的變形,在外部是無法通過<code>__star</code>這個名字通路到的。
3、在子類定義的<code>__star</code>不會覆寫在父類定義的<code>__star</code>,因為子類中變形成了:<code>_子類名__star</code>,而父類中變形成了:<code>_父</code>
類名<code>__star</code>,即雙下滑線開頭的屬性在繼承給子類時,子類是無法覆寫的。
注意:對于這一層面的封裝(隐藏),我們需要在類中定義一個函數(接口函數)在它内部通路被隐藏的屬性,然後
外部就可以使用了
2.1多态的概念
多态的特性是調用不同的子類将會産生不同的行為,而無需明确知道這個子類實際上是什麼。
多态實際上是依附于繼承的兩種含義:"改變"和"擴充"本身就意味着必須有機制去選用你改變/擴充過的版本,多态實質上就是繼承的實作細節;
子類執行個體化後調用基類的方法,<code>w1.turn_ice()</code>叫做多态;
3.1反射的介紹
反射說簡單點 --> 就是利用字元串的形式去對象(子產品)中操作(尋找/檢查/設定/删除)成員。
hasattr(object,“name”)
getattr(object,“name”,default=None)
setattr(x,y,v)
delattr(x,y)
例如:
3.2 反射的好處
(1)好處一:實作可插拔機制
有倆程式員,一個czd,一個是egon,lili在寫程式的時候需要用到egon所寫的類,但是egon去跟女朋友度蜜月去了,還沒有完成他寫的類,lili想到了反射,使用了反射機制czd可以繼續完成自己的代碼,等egon度蜜月回來後再繼續完成類的定義并且去實作czd想要的功能。
總之反射的好處就是,可以事先定義好接口,接口隻有在被完成後才會真正執行,這實作了即插即用,這其實是一種‘後期綁定’,什麼意思?即你可以事先把主要的邏輯寫好(隻定義接口),然後後期再去實作接口的功能
導入子產品
(2)好處二:動态導入子產品(基于反射目前子產品成員)