關(guān)鍵字:類的私有屬性、特殊屬性、字典數(shù)據(jù)類型
????????今天在學(xué)習(xí)我們今天的字典數(shù)據(jù)類型之前,我們先來看一下在python中關(guān)于類的一個小知識點:類的私有屬性。
學(xué)過java的同學(xué)都知道,在java中對于私有屬性,是用一個專有的修飾符private來修飾,在python這個比較自由的語言中,對于私有屬性的定義也相當(dāng)自由,很簡單在屬性前+__,注意是兩個下劃線。
我們看下面一個例子

實例中我們定義了__sex為私有屬性,我們發(fā)現(xiàn)通過me.__sex這種寫法是無法獲取到該屬性的。我們都知道在java中要獲取私有屬性可以通過getter和setter方法對私有屬性進行操作的,當(dāng)然了在python中這也是可以的,但是還有一種更有趣的方式去獲取私有屬性(私有方法也是如此),如下
私有變量:實例._類名__變量名,私有方法也是如此
私有方法:實例._類名__方法名()

注意,類名._類名__變量名 也是可以獲取私有屬性的,但此時獲取的屬性屬于類屬性,舉個栗子,

若是此時我們做個小小的改動,把大寫的M換成小寫的m如下

這其中區(qū)別我想大家一眼就能瞧出。
是的,此時我們不禁要問,為啥以這種方式我們可以訪問到呢?
下面來學(xué)習(xí)python中另一個小知識點一個內(nèi)置函數(shù)dir()和一個數(shù)據(jù)模型__dict__(也叫Special attributes,還有一些特殊屬性,比如__doc__,__globals__等,之后我們會學(xué)到。詳情看官網(wǎng):3. Data model — Python 3.6.5 documentation)。
dir()函數(shù)描述:dir()?函數(shù)不帶參數(shù)時,返回當(dāng)前范圍內(nèi)的變量、方法和定義的類型列表;帶參數(shù)時,返回參數(shù)的屬性、方法列表。
__dict__是用來存儲對象屬性的一個字典,其鍵為屬性名,值為屬性的值。
定義將就看一下,直接上代碼可能更清晰,接著上面的例子

我們看到了我們熟悉的_類名__屬性名,原來我們之所以能訪問到python所謂的私有屬性,是因為python內(nèi)部已經(jīng)將私有屬性重新命名!
在例子中我們Me.__dict__返回的數(shù)據(jù)類型是python中非常經(jīng)典的數(shù)據(jù)類型:字典。
其實字典就是java中的map(數(shù)據(jù)印射),由于比較簡單,我們就用個例子簡單看下

需要注意兩點:
1dict內(nèi)部存放的順序和key放入的順序是沒有關(guān)系的。
2dict的key必須是不可變對象。