封裝
面向對象的程序設計中,某個類把所需要的數據(也可以說是類的屬性)和對數據的操作(也可以說是類的行為)
全部都封裝在類中,分別稱為類的成員變量和方法(或成員函數)。這種把成員變量和成員函數封裝在一起的編程
特性稱為封裝。
類由屬性和方法組成,類的屬性是對數據的封裝,而類的方法是對類的行為的封裝。
抽象的實現并不一定必須是一張表或映射表的數據結構,選擇哪種方式對契約進行實現并不重要,對象的抽象優于它
的實現決定。外部視圖不關心內部具體如何實現的。
抽象和封裝是互補的概念,抽象關注對象的可觀察到的行為(外部),而封裝關注的是行為的實現。封裝通常是通過
信息隱藏來實現的。信息隱藏是將那些不涉及對象本質特征的秘密都隱藏起來的過程。“復雜系統的每部分都不應該依
賴于其他部分的內部細節”,抽象“幫助人們思考他們做什么”,而封裝“讓程序可以借助最少的工作進行可靠的修改”。
封裝在不同的抽象自己提供了明確的邊界,因此導致了清晰的分離關注。如:表現層中,我們通常只關注業務層提供
了那些接口,而不會關注接口具體是如何實現的一樣。較高抽象層次上的對象看不到較低抽象層次的實現細節。
平時,我們為類定義兩個部分:一個接口和一個實現。類的接口描述了它的外部視圖,包含了這個類所有實例的共同
行為的抽象。類的實現包含抽象的表示以及實現期望的行為的機制。通過類的接口,我們能知道客戶可以對這個類的
所有實例所作出的假定。而客戶不能對這個類的細節做任何假定。
“封裝是一個過程,它分隔構成抽象的結構和行為的元素。封裝的作業是分離抽象的概念接口與實現。”
類的方法也分為公有方法和私有方法。
類的私有方法只能通過對象名(在類內部也就是self)在類的內部進行訪問。
而公有方法可以在類的外部通過對象名進行訪問。
和屬性不同的是,一般意義上的類方法屬于對象,也就是說只有通過對象才可以進行調用,不能直接通過類名進行調用。
一般類方法的第一個參數必須是代指類對象本身的(一般我們常用self,實際上可以是任何自定義的名字,只不過self是
大家約定俗成的用法,在下面介紹的類方法中,大家一般用cls,因為那里更多地標識的是一個類),可以通過self訪問
類對象的成員函數和數據。
同樣,公有的成員函數和私有的成員函數也是通過名字來區分的,雙下劃線‘__’開頭的函數是私有成員函數。
class MsgManagerment:
? ? ?def __send_vlidate_code(self, code):
? ? ? ? ? print("發送驗證碼...%s" % code)
? ? ?def send_msg(self, type, code):
? ? ? ? ?if type == "1":# 優化監控部
? ? ? ? ? ? ? ?print("*********")
? ? ? ? ? ? self.__send_vlidate_code(code)
? ? ? ? ? ? ?return 0
? ? ? ? ?else:
? ? ? ? ? ?return "沒有權限"
m = MsgManagerment()
res = m.send_msg("1", "abc")
print(res)