封裝
面向?qū)ο蟮某绦蛟O(shè)計中,某個類把所需要的數(shù)據(jù)(也可以說是類的屬性)和對數(shù)據(jù)的操作(也可以說是類的行為)
全部都封裝在類中擒抛,分別稱為類的成員變量和方法(或成員函數(shù))膏萧。這種把成員變量和成員函數(shù)封裝在一起的編程
特性稱為封裝帽揪。
類由屬性和方法組成绞幌,類的屬性是對數(shù)據(jù)的封裝嵌戈,而類的方法是對類的行為的封裝。
抽象的實現(xiàn)并不一定必須是一張表或映射表的數(shù)據(jù)結(jié)構(gòu)搂誉,選擇哪種方式對契約進(jìn)行實現(xiàn)并不重要,對象的抽象優(yōu)于它
的實現(xiàn)決定静檬。外部視圖不關(guān)心內(nèi)部具體如何實現(xiàn)的炭懊。
抽象和封裝是互補的概念,抽象關(guān)注對象的可觀察到的行為(外部)拂檩,而封裝關(guān)注的是行為的實現(xiàn)侮腹。封裝通常是通過
信息隱藏來實現(xiàn)的。信息隱藏是將那些不涉及對象本質(zhì)特征的秘密都隱藏起來的過程稻励「缸瑁“復(fù)雜系統(tǒng)的每部分都不應(yīng)該依
賴于其他部分的內(nèi)部細(xì)節(jié)”,抽象“幫助人們思考他們做什么”望抽,而封裝“讓程序可以借助最少的工作進(jìn)行可靠的修改”加矛。
封裝在不同的抽象自己提供了明確的邊界,因此導(dǎo)致了清晰的分離關(guān)注煤篙。如:表現(xiàn)層中斟览,我們通常只關(guān)注業(yè)務(wù)層提供
了那些接口,而不會關(guān)注接口具體是如何實現(xiàn)的一樣辑奈。較高抽象層次上的對象看不到較低抽象層次的實現(xiàn)細(xì)節(jié)苛茂。
平時,我們?yōu)轭惗x兩個部分:一個接口和一個實現(xiàn)鸠窗。類的接口描述了它的外部視圖妓羊,包含了這個類所有實例的共同
行為的抽象。類的實現(xiàn)包含抽象的表示以及實現(xiàn)期望的行為的機(jī)制稍计。通過類的接口躁绸,我們能知道客戶可以對這個類的
所有實例所作出的假定。而客戶不能對這個類的細(xì)節(jié)做任何假定。
“封裝是一個過程涨颜,它分隔構(gòu)成抽象的結(jié)構(gòu)和行為的元素费韭。封裝的作業(yè)是分離抽象的概念接口與實現(xiàn)⊥ス澹”
類的方法也分為公有方法和私有方法星持。
類的私有方法只能通過對象名(在類內(nèi)部也就是self)在類的內(nèi)部進(jìn)行訪問。
而公有方法可以在類的外部通過對象名進(jìn)行訪問弹灭。
和屬性不同的是督暂,一般意義上的類方法屬于對象,也就是說只有通過對象才可以進(jìn)行調(diào)用穷吮,不能直接通過類名進(jìn)行調(diào)用逻翁。
一般類方法的第一個參數(shù)必須是代指類對象本身的(一般我們常用self,實際上可以是任何自定義的名字捡鱼,只不過self是
大家約定俗成的用法八回,在下面介紹的類方法中,大家一般用cls驾诈,因為那里更多地標(biāo)識的是一個類)缠诅,可以通過self訪問
類對象的成員函數(shù)和數(shù)據(jù)。
同樣乍迄,公有的成員函數(shù)和私有的成員函數(shù)也是通過名字來區(qū)分的管引,雙下劃線‘__’開頭的函數(shù)是私有成員函數(shù)。
class MsgManagerment:
? ? ?def __send_vlidate_code(self, code):
? ? ? ? ? print("發(fā)送驗證碼...%s" % code)
? ? ?def send_msg(self, type, code):
? ? ? ? ?if type == "1":# 優(yōu)化監(jiān)控部
? ? ? ? ? ? ? ?print("*********")
? ? ? ? ? ? self.__send_vlidate_code(code)
? ? ? ? ? ? ?return 0
? ? ? ? ?else:
? ? ? ? ? ?return "沒有權(quán)限"
m = MsgManagerment()
res = m.send_msg("1", "abc")
print(res)