python學習(四):python變數和函式
阿新 • • 發佈:2018-12-03
python用下劃線作為變數字首和字尾指定特殊變數
_xxx 不能用’from module import *’匯入
__xxx__ 系統定義名字
__xxx 類中的私有變數名
核心風格:避免用下劃線作為變數名的開始。
因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下劃線作為變數名的開始。一般來講,變數名_xxx被看作是“私有 的”,在模組或類外不可以使用。當變數是私有的時候,用_xxx 來表示變數是很好的習慣。因為變數名__xxx__對Python 來說有特殊含義,對於普通的變數應當避免這種命名風格。
“單下劃線” 開始的成員變數叫做保護變數,意思是隻有類物件和子類物件自己能訪問到這些變數;
“雙下劃線” 開始的是私有成員,意思是隻有類物件自己能訪問,連子類物件也不能訪問到這個資料。
以單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用“from xxx import *”而匯入;以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結尾的(__foo__)代表python裡特殊方法專用的標識,如 __init__()代表類的建構函式。
行為方式與迭代器類似的類
- 無論何時建立迭代器都將呼叫
__iter__()
方法。這是用初始值對迭代器進行初始化的絕佳之處。 - 無論何時從迭代器中獲取下一個值都將呼叫
__next__()
方法。 __reversed__()
方法並不常用。它以一個現有序列為引數,並將該序列中所有元素從尾到頭以逆序排列生成一個新的迭代器。
計算屬性
- 如果某個類定義了
__getattribute__()
方法,在 每次引用屬性或方法名稱時 Python 都呼叫它(特殊方法名稱除外,因為那樣將會導致討厭的無限迴圈)。 - 如果某個類定義了
__getattr__()
方法,Python 將只在正常的位置查詢屬性時才會呼叫它。如果例項 x 定義了屬性color,x.color
x.__getattr__('color')
;而只會返回x.color 已定義好的值。 - 無論何時給屬性賦值,都會呼叫
__setattr__()
方法。 - 無論何時刪除一個屬性,都將呼叫
__delattr__()
方法。 - 如果定義了
__getattr__()
或__getattribute__()
方法,__dir__()
方法將非常有用。通常,呼叫dir(x)
將只顯示正常的屬性和方法。如果__getattr()__
方法動態處理color 屬性,dir(x)
將不會將 color 列為可用屬性。可通過覆蓋__dir__()
方法允許將 color 列為可用屬性,對於想使用你的類但卻不想深入其內部的人來說,該方法非常有益。
可比較的類