1. 程式人生 > >《流暢的python》學習筆記 - python資料模型

《流暢的python》學習筆記 - python資料模型

  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__()