面向對象的程序設計中,某個類把所需要的數據(也可以說是類的屬性)和對數據的操作(也可以說是類的行為)全部都封裝在類中,分別稱為類的成員變量和方法(或成員函數)。這種把成員變量和成員函數封裝在一起的編程特性稱為封裝。
類的屬性按使用范圍分為共有屬性和私有屬性。具體地,在Python實現面向對象的編程思想的時候,封裝在類中的屬性可以分為兩種:數據類的屬性和數據對象的屬性(也可以成為數據類的成員變量和屬于對象的成員變量),其中,這兩種成員變量又各自分為共有成員變量和私有成員變量。(暈暈乎乎)
在使用面向對象的封裝特性時,需要:
將內容封裝到某處
從某處調用被封裝的內容
A.封裝什么?(類的屬性是對數據的封裝,而類的方法是對類的行為的封裝)
你錢包里有多少錢(數據的封裝)
你的性取向(數據的封裝)
你撒尿的具體功能是怎么實現的(方法的封裝)
B.為什么要封裝?
1.封裝數據的主要原因:保護隱私(作為男人的你,臉上就寫著:我喜歡男人,你害怕么?)
封裝方法的主要原因:隔離復雜度(快門就是傻瓜相機為傻瓜們提供的方法,該方法將內部復雜的照相功能都隱藏起來了,比如你不必知道你自己的尿是怎么流出來的,你直接掏出自己的接口就能用尿這個功能)
2.不帶下劃線的封裝:直接訪問,推門而入
帶一個下劃線的封裝:約定(項目規范)是私有屬性,不讓直接訪問,約定:進門前先敲門。這種機制并沒有真正意義上限制我們從外部直接訪問屬性,知道了類名和屬性名就可以拼出名字:_類名__屬性,然后就可以訪問了
帶兩個下劃線的封裝:私有屬性,反鎖,進門前必須敲門
C.什么時候應該封裝類
當項目中出現一些零散的、有關系的基本類型數據時,考慮通過類型將這些數據統一組織起來管理。定義一個自定義類,將這些數據作為自己的屬性。
當封裝繼續,操作進階,添加@property和@method.setter,此時set/get函數被隱藏,同一個類中,出現了相同名稱但是參數不同的函數,這個地方還好,畢竟內容是自己寫的,而且也是在一起的,關鍵是一旦開始編程,再拿面向過程單純的寫函數時那種眼光去看待編程中的內容,會感覺難以理解,一會跳到這里,一會蹦到那邊(暈暈乎乎的感覺消失了,變成了暈倒)。
你面對的是全局,是自定義類,心理上沒有了那種整齊感、順序感,反而不容易上手,此時,函數的功能要單一這一理念得到了初步體現,函數進行的功能越單一,重復利用性越高,比如瀏覽網頁時,或者直接登陸,或者在瀏覽某一子頁面想要發表評論、回復信息時,需要登陸,那么這里登陸這一方法跳轉的界面就不同了。
作為智慧生物的我們,在沒有對某一對象的思想之前,所有的理解感覺就像咫尺天涯,內容近在眼前,上手卻又遠在天邊,而思想一旦開始轉變擁有,方法僅僅是熟悉度上的時間與練習