組合:安全
定義:什麼叫組合,多個對象放在一塊兒稱爲組合。函數
實現:在程序中,一個對象將另外一個對象做爲本身的屬性。(類外部經過對象去添加屬性:obj.name=’新名字’,這個屬性會被添加到對象,將‘新名字’換成另外一個對象,就將另外一個對象的全部屬性,組合到obj中)spa
做用:組合也能夠下降代碼冗餘。對象
面向對象三大特徵之一封裝:接口
封裝不是真正意義上的隱藏,封裝的真諦在於明確區份內外。變量
1.什麼是封裝:封裝是指在類中屬性被隱藏,可是對外部提供訪問接口。原理
在面向對象中指的是將屬性和方法封裝起來。語法
2.爲何要封裝:程序
3.隔離複雜度。指封裝方法的做用。方法
3.如何定義封裝:在定義一個類時,在屬性或方法名稱前,加上兩個下滑線,就能夠將其設置爲私有的(封裝)。類中封裝後的屬性,是能夠在類中經過類名(或對象名).__被封裝屬性名被直接訪問的,可是外部是沒法直接訪問的。(能夠經過接口訪問,和強行訪問obj._A__name)
4.封裝的實現原理與查找:
原理:
在類A中定義的(__name=’egon’、或者def __func():)屬性名稱在類的定義階段發生了轉變,變成了_A__name或_A__func,因此致使外部沒法直接經過對象名.原名去訪問(可是能夠經過對象名.改變後的名字去訪問)
這種操做並非嚴格意義上的限制外部訪問,僅僅是一種語法上的變形,主要用來限制外部直接訪問。
查找方式:
類中:類名.__屬性名(A.__name)或者self.__屬性名(self.__name)
類外:對象名._類名__屬性名(obj._A__name)
類名._類名__屬性名(注意:此時該屬性是定義在類中的變量,若是是方法還須要手動傳入對象)
A.封裝數據的做用:將數據隱藏起來不是目的,隱藏起來而後對外提供操做接口,咱們能夠在接口添加對該數據操做的限制。一遍完成數據屬性操做的嚴格控制。
B.封裝方法的做用:目的是隔離複雜度(如取款過程,具體步驟爲:插卡、認證、取款、打印帳單,可是咱們只須要知道取款功能便可,將其餘方封裝,而且隱藏後放到取款函數中調用)