一、封裝
1.封裝是什麼?
是面向對象的三大特性之一。指的是隱藏對象中一些不希望被外部所訪問的屬性或者方法。
2.如何隱藏一個對象中的屬性?
將對象的屬性名,修改爲一個外部不知道的名字。
3.如何獲取(修改)對象中的隱藏的屬性?
需要提供一個getter和setter方法使外部可以訪問到屬性。
getter 獲取對象中的指定屬性(get_屬性名)
setter用來設置對象的指定屬性(set_屬性名)
4.封裝的好處
使用封裝,增加了類的定義的複雜成俗,但是也確保了數據的安全性。
1.隱藏了屬性名,使調用者無法隨意的修改對象中的屬性
2.增加了getter和setter方法,很好的控制屬性是否是隻讀的。
如果希望屬性是隻讀的,則可以直接去掉setter方法
如果希望屬性不能被外部訪問,則可以去掉getter方法
3.使用setter方法設置屬性,可以增加數據的驗證,確保數據的值是正確的。
4.使用getter屬性獲取屬性,使用setter方法設置屬性。可以在讀取屬性和修改屬性的同時做一些其他的處理。
5.使用getter方法可以表示一些計算的屬性。
二、隱藏類中的屬性
--可以爲對象的屬性使用雙下劃線開頭,__XXX
雙下劃線開頭的屬性是對象的隱藏屬性,隱藏屬性只能在類的內部訪問,無法通過對象訪問。
--其實隱藏屬性只不過是python自動爲屬性改了一個名字。
實際上將名字改爲了,_類名__屬性名,比如__name修改爲_Person__name
--使用__開頭的屬性,實際上依然可以在外部訪問,所以這種方式我們一般不用
一般我們會將一些私有屬性(不希望被外部訪問的屬性)以_開頭
一般情況下,使用_開頭的屬性都是私有屬性,沒有特殊需求不要修改私有屬性。
三、property裝飾器
--@property裝飾器,用來將一個get方法,轉換爲對象的屬性
--添加爲property裝飾器以後去,我們就可以像屬性一樣使用get方法。
--使用property裝飾的方法,必須和屬性名是一樣的。
--setter方法的裝飾器:@屬性名.setter