1、變量的定義python
在Python中,有如下幾種方式來定義變量:函數
xx:公有變量學習
_xx:前置單下劃線,私有化屬性或方法,通常來說,變量名_xx被看做是「私有 的」,在模塊或類外不可使用。當變量是私有的時候,用_xx 來表示變量是很好的習慣。類對象和子類能夠訪問,這並不能徹底作到真正的私有,只是約定俗成的而已,這樣寫表示不但願這個變量在外部被直接調用對象
__xx:前置雙下劃線,私有化屬性或方法,沒法在外部直接訪問(名字重整因此訪問不到,只能是容許這個類自己進行訪問了。連子類也不能夠)get
__xx__:先後雙下劃線,系統定義名字(這就是在python中強大的魔法方法),由於變量名__xxx__對Python 來講有特殊含義,對於普通的變量應當避免這種命名風格。it
xx_:後置單下劃線,用於避免與Python關鍵詞的衝突test
如如下例子所示,我在test類中定義了x,_x和 __x三個屬性,並建立了test的類對象t,對這三個屬性進行訪問,__x不能被訪問到import
學習歷來不是一我的的事情,要有個相互監督的夥伴,工做須要學習python或者有興趣學習python的夥伴能夠私信回覆小編「學習」 獲取資料,一塊兒學習變量
可使用命令dir查看t中的屬性和方法,__x的名字已經被重整爲「_test__x」了,若是你非要經過外部訪問,也是能夠的,可使用t._test__x對__x進行訪問。module
python中沒有真正的公有和私有變量,python只是對變量名稱作了一個變化,仍是能夠在外部訪問到的,是僞私有。
注:雖然私有變量能夠經過_類名__變量名來訪問,但強烈建議不要這樣作!
2、使用不一樣方法導入模塊,模塊中私有變量的使用區別
在使用不一樣方法導入模塊後,是否能使用模塊中的私有屬性和方法,有如下兩種狀況
使用 from somemodule import * 進行導入,不能導入私有變量,結果以下:
在使用 import somemodule 導入模塊的狀況下,能導入並使用私有屬性和方法
3、對類中的私有屬性進行操做的方法
若是你想對類中的私有屬性進行操做時,有如下兩種方法種方法:
注:
1,在構造函數__init__中是_x,不是x,你直接x是訪問不到的;
2,爲何是_x 而不是x,這是python中的私有變量(雖然python中沒有公有變量和私有變量,也就是說這是僞私有),在python中,若是一個變量不想被外部直接訪問,通常是在變量前加一個下劃線,提醒不要直接訪問(實際上是能夠經過self._x訪問到的,若是不想被訪問還可使用雙下劃線__x,也是不能直接訪問)因此提供get_x這樣的函數供使用者訪問;
3,爲何要使用_x這樣的僞私有變量,由於咱們使用property時,讓方法變成屬性的方式來調用,通常是這樣寫x=property(...),這樣調用更加清晰明瞭;可是若是構造函數中的變量也用x,就會和property中的變量有衝突,全部通常咱們寫_x