符合Python風格的物件

2022-07-18 14:54:29 字數 1212 閱讀 7997

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風格規範

請務必保持 的一致性 如果你正在編輯 花幾分鐘看一下周邊 然後決定風格.如果它們在所有的算術操作符兩邊都使用空格,那麼你也應該這樣做.如果它們的注釋都用標記包圍起來,那麼你的注釋也要這樣.制定風格指南的目的在於讓 有規可循,這樣人們就可以專注於 你在說什麼 而不是 你在怎麼說 我們在這裡給出的是全域...