python的私有屬性和受保護的屬性:
如果有人編寫了dog類,這個類內部用到了mood例項屬性,但是沒有將其開放。
現在,你建立了dog類的子類:beagle。
如果你在毫不知情的情況下又建立了名為mood的例項屬性,那麼在繼承的方法中就會把dog類的mood屬性覆蓋掉。
名稱改寫:
為了避免這個情況,如果以__mood的形式命名例項屬性,python會把屬性存入例項的__dict__屬性中,而且會在前面加上乙個下劃線和類名。
因此,對dog類來說,__mood會變成_dog__mood;對beagle來說,會變成_beagle__mood。這個特性就是名稱改寫。
約定俗成:
對於不喜歡使用名稱改寫的人,他們約定使用乙個下劃線字首編寫的「受保護」的屬性。(如:_mything_blahblah)
類似於使用全大寫字母表示乙個常量。
__slots__類屬性節省空間:
預設情況下,python在各個例項中名為__dict__的字典裡儲存例項屬性,字典會消耗大量記憶體。
繼承自父類的__slots__屬性沒有效果。
python只會使用各個類當前類中定義的__slots__屬性。
建立乙個類屬性__slots__,把它的值設為乙個字串構成的可迭代物件,其中各個元素表示各個例項屬性。
class vector:__slots__ = ('__x','__y')
在類中定義了__slots__屬性之後,例項不能再有__slots__中所列名稱之外的其他屬性。
如果類中定義了__slots__屬性,而且想把例項作為弱引用的目標,要把 '__weakref__' 新增到__slots__中。
例項只能擁有__slots__屬性,除非把 "__dict__" 加入到__slots__中後,會支援動態建立屬性。
覆蓋類屬性:
類屬性可用於為例項屬性提供預設值。
如果為不存在的例項屬性賦值,會新建例項屬性。
如果想修改類屬性的值,必須直接在類上修改,不能通過例項修改。
如果想修改所有例項的xx屬性的預設值,可以通過 類.xx 修改
編寫符合Python風格的物件
1 掌握編寫pythonic code背後常用的特殊方法 2 掌握可擴充套件的格式化輸出方法 3 了解可雜湊物件的設定以及節省記憶體的 slots 物件。自定義的向量類需要支援基本的輸出,迭代,求模。從自定義向量型別入手寫出符合python風格的物件,這離不開特殊方法的支援。我們期望的自定義向量型別...
物件導向程式設計風格 基於物件程式設計風格
本文主要通過實現thread 類來展現兩種程式設計風格的不同點。很多人沒有區分 物件導向 和 基於物件 兩個不同的概念。物件導向的三大特點 封裝,繼承,多型 缺一不可。通常 基於物件 是使用物件,但是無法利用現有的物件模板產生新的物件型別,繼而產生新的物件,也就是說 基於物件 沒有繼承的特點。而 多...
python風格規範 Python風格規範
請務必保持 的一致性 如果你正在編輯 花幾分鐘看一下周邊 然後決定風格.如果它們在所有的算術操作符兩邊都使用空格,那麼你也應該這樣做.如果它們的注釋都用標記包圍起來,那麼你的注釋也要這樣.制定風格指南的目的在於讓 有規可循,這樣人們就可以專注於 你在說什麼 而不是 你在怎麼說 我們在這裡給出的是全域...