1. 程式人生 > >python學習(四):python變數和函式

python學習(四):python變數和函式

python用下劃線作為變數字首和字尾指定特殊變數

_xxx 不能用’from module import *’匯入

__xxx__ 系統定義名字

__xxx 類中的私有變數名

核心風格:避免用下劃線作為變數名的開始。

 

因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下劃線作為變數名的開始。一般來講,變數名_xxx被看作是“私有 的”,在模組或類外不可以使用。當變數是私有的時候,用_xxx 來表示變數是很好的習慣。因為變數名__xxx__對Python 來說有特殊含義,對於普通的變數應當避免這種命名風格。

“單下劃線” 開始的成員變數叫做保護變數,意思是隻有類物件和子類物件自己能訪問到這些變數;
“雙下劃線” 開始的是私有成員,意思是隻有類物件自己能訪問,連子類物件也不能訪問到這個資料。

以單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用“from xxx import *”而匯入;以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結尾的(__foo__)代表python裡特殊方法專用的標識,如 __init__()代表類的建構函式。

 

 

行為方式與迭代器類似的類

  1. 無論何時建立迭代器都將呼叫 __iter__() 方法。這是用初始值對迭代器進行初始化的絕佳之處。
  2. 無論何時從迭代器中獲取下一個值都將呼叫 __next__() 方法。
  3. __reversed__() 方法並不常用。它以一個現有序列為引數,並將該序列中所有元素從尾到頭以逆序排列生成一個新的迭代器。

計算屬性

 

  1. 如果某個類定義了 __getattribute__() 方法,在 每次引用屬性或方法名稱時 Python 都呼叫它(特殊方法名稱除外,因為那樣將會導致討厭的無限迴圈)。
  2. 如果某個類定義了 __getattr__() 方法,Python 將只在正常的位置查詢屬性時才會呼叫它。如果例項 x 定義了屬性color, x.color
     將 不會 呼叫x.__getattr__('color');而只會返回x.color 已定義好的值。
  3. 無論何時給屬性賦值,都會呼叫 __setattr__() 方法。
  4. 無論何時刪除一個屬性,都將呼叫 __delattr__() 方法。
  5. 如果定義了 __getattr__() 或 __getattribute__() 方法, __dir__() 方法將非常有用。通常,呼叫 dir(x) 將只顯示正常的屬性和方法。如果__getattr()__方法動態處理color 屬性, dir(x) 將不會將 color 列為可用屬性。可通過覆蓋 __dir__() 方法允許將 color 列為可用屬性,對於想使用你的類但卻不想深入其內部的人來說,該方法非常有益。

 

可比較的類