封裝:
面向對象的程序設計中,某個類把所需要的數據(也可以說是類的屬性)和對數據的操作(也可以說是類的行為)全部都封裝在類中,分別稱為類的成員變量和方法(或成員函數)。這種把成員變量和成員函數封裝在一起的編程特性稱為封裝。
類的屬性
類由屬性和方法組成,類的屬性是對數據的封裝,而類的方法是對類的行為的封裝。類的屬性按使用范圍分為共有屬性和私有屬性。具體地,在python實現面向對象的編程思想的時候,封裝在類中的屬性可以分為兩種數據類的屬性和數據對象的屬性(也可以成為數據類的成員變量和屬于對象的成員變量),其中,這兩種成員變量又各自分為共有成員變量和私有成員變量。
類的成員變量和對象的成員變量
類的成員變量定義在類中,和類的成員函數在同一縮進等級。而對象的成員變量定義在init(self)成員函數中,和init(self)函數下的變量和語句在同一等級。通俗地講,類的成員變量屬于類,共類的所有對象和類本身所共有,也就是說所有的類的對象和類只有一份這樣的變量。而對象的成員變量屬于類的對象本身,每個對象都有一份,而且各個對象之間互不影響。
公有成員變量和私有成員變量
python中用成員變量的名字來區分是共有成員變量或者是私有成員變量。python中,以兩個下劃線‘__’開頭的變量都是私有成員變量,而其余的變量都屬于公有成員變量。其中,私有的成員變量只能在類的內部訪問,而共有的公有的成員變量可以在類的外部進行訪問。
方法重載:
在一個類型中,出現了相同名稱,不同參數的函數/方法,稱為方法重載
目的:在執行的過程中,通過參數的不同,來執行不同的代碼,實現不同的功能。python中,已經實現了,【可變參數、關鍵字參數】--【我不需要方法重載了!】python又針對屬性訪問函數,進行了相同名稱函數的定義 —— 偽方法重載
偽方法重載的目的:配合封裝,隱藏數據訪問方法的底層實現!
公有方法和私有方法
如上面所說,類的方法是對類行為的封裝。類的方法也分為公有方法和私有方法。類的私有方法只能通過對象名(在類內部也就是self)在類的內部進行訪問,而公有方法可以在類的外部通過對象名進行訪問。和屬性不同的是,一般意義上的類方法屬于對象,也就是說只有通過對象才可以進行調用,不能直接通過類名進行調用。一般類方法的第一個參數必須是代指類對象本身的(一般我們常用self,實際上可以是任何自定義的名字,只不過self是大家約定俗成的用法,在下面介紹的類方法中,大家一般用cls,因為那里更多地標識的是一個類),可以通過self訪問類對象的成員函數和數據。
同樣,公有的成員函數和私有的成員函數也是通過名字來區分的,雙下劃線‘__’開頭的函數是私有成員函數。