《流暢的python》學習筆記 - python資料模型
阿新 • • 發佈:2019-01-03
python資料模型,就是對python語言框架的描述,規範了這門語言自身構建模組的介面。
每次都要提醒自己,python是面向物件的,要用面向物件的方法來思考問題。
私有和被保護的屬性
- 類的私有屬性:兩個下劃線開頭(簡稱dunder),宣告該屬性為私有,不能在物件(類)外部或直接使用,例如:__private_attrs;
- 類的方法:在類的內部,使用關鍵字def定義類的方法,與一般函式定義不同,類的方法必須包含引數self,且為第一個引數;
- 類的私有方法:以兩個下劃線開頭,與類的私有屬性類似,例如:__private_methods()。
- 魔術方法:以雙下劃線開頭並以雙下劃線結束的特殊方法,例如__getitem__(),這些特殊方法能讓你自己的物件實現和支援以下的語言架構,並與之互動(在《流暢的python》書中,作者將這種方法稱作“魔術方法(megic method)”或 “dunder method”):
- 迭代
- 集合類
- 屬性訪問
- 運算子過載
- 函式的方法的呼叫
- 物件的建立和銷燬
- 字串表示形式和格式化
- 管理上下文
預設情況下,類的屬性和方法都是公開的,python中沒有類似public或private等關鍵字來修飾類的方法和屬性。
在內部,python使用一種“name mangling”技術,將__membername替換成_class__membername,因此,使用者在外部訪問__membername就會被提示找不到相應的變數。
python的私有變數和方法仍然是可以訪問的,方法如下:
- 例項._類名__變數名
- 例項._類名__變數名
也就是說,python沒有“真正”的私有機制,而是通過下劃線實現“偽私有”,所以python中腰避免定義下劃線開頭的變數和方法。
變數名格式 | 含義 |
---|---|
_xxx | 單下劃線開頭的變數叫做“保護變數”,只有類的例項和子類例項能訪問 |
__xxx | 雙下劃線開頭的變數,即私有成員,只有類物件自己能訪問,子類物件也不能訪問 |
xxx | 系統定義成員,python的專用標識,例如__init__() |