python 類的屬性 slots

2022-03-15 13:32:33 字數 729 閱讀 5085

當乙個類需要建立大量例項時,可以通過__slots__宣告例項所需要的屬性,

1)更快的屬性訪問速度

2)減少記憶體消耗

3)限定乙個類建立的例項只能有固定的例項屬性(例項變數),不允許物件新增列表以外的例項屬性

4)防止使用者因錯寫屬性名稱而發生程式錯誤

1)每個繼承的子類都要重新定義一遍__slots__

例項只能包含哪些在__slots__定義的屬性,這對寫程式的靈活性有影響,比如你由於某個原因新網給instance設定乙個新的屬性,比如instance.a = 1, 但是由於a不在__slots__裡面就直接報錯了,你得不斷地去修改__slots__或者用其他方法迂迴的解決

2)例項不能有弱引用(weakref)目標,否則要記得把__weakref__放進__slots__

所以例項不超過萬級別的類,__slots__是不太值得使用的

說明1. __slots__ 屬性是乙個列表,列表的值是字串

2. 含有__slots__屬性的類所建立的例項物件沒有__dict__屬性,即此例項不用字典來儲存屬性

用slots定義基本屬性的簡單例子

參考:

python限定類屬性的類屬性 slots

slots 由於python是動態語言,任何例項在執行期都可以動態地新增屬性。如果要限制新增的屬性,例如,student類只允許新增 name gender和score 這3個屬性,就可以利用python的乙個特殊的 slots 來實現。顧名思義,slots 是指乙個類允許的屬性列表 class s...

slots屬性限制

class admin 限制要新增的例項屬性 節約記憶體資源 slots name pwd defstr self return format self.name,self.pwd pass r admin r.name root r.pwd pwd 在定義了slots變數之後student類的例項...

Python中slots的使用

預設情況下每個類都會有乙個dict,這個dict維護了例項的所有屬性,每個例項都有乙個dict,並且通過 dict 訪問。通過如下的例子來說明這個dict的使用。class test object x 9 類變數 def init self pass t1 test t2 test t1.y 8 給...