python中__slots__節(jié)約內(nèi)存的具體做法
1、利用_slots__類屬性,可以將實例屬性存儲在元zu中,大大節(jié)省了存儲空間。
2、所有屬性都必須定義為__slots__元組,子類還必須定義__slots__。
實例如果支持弱引用,需要在__weakref中添加__slots__。
實例class Vector2d: __slots__ = (’__x’, ’__y’) typecode = ’d’
知識點擴展:
__slots__
如果在一個類中定義了__slots__屬性,那么這個類的實例將不會擁有__dict__屬性,沒有__dict__的實例也就不能添加實例屬性了。簡單來說,__slots__的作用就是阻止類在實例化時為實例分配__dict__屬性,限制該實例能添加的屬性。
作用
通常情況下實例使用__dict__來存儲自己的屬性,它允許實例動態(tài)地添加或刪除屬性。然而,對一些在編譯期就已經(jīng)知道有什么變量的類或者不允許動態(tài)添加變量的類來說,它們并不需要動態(tài)地添加變量。如果想要限制實例屬性,不想讓它動態(tài)添加屬性怎么辦?比如我們只允許對A的實例添加name和age屬性。
為了達到上述目的,Python允許在定義class的時候,定義一個__slots__變量,來限制該class的實例能添加的屬性。
class A(object): __slots__ = (’age’,’name’)a = A()a.name = ’xiaoming’a.age = 10a.id = 123456 #error AttributeError: ’A’ object has no attribute ’id’
由于id不在__slots__中,所以實例不能添加id屬性。任何試圖給實例添加一個其名不在__slots__中的屬性都將觸發(fā)AttributeError異常。
以上就是python中__slots__節(jié)約內(nèi)存的具體做法的詳細內(nèi)容,更多關(guān)于python中__slots__如何節(jié)約內(nèi)存的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. jsp實現(xiàn)登錄驗證的過濾器2. JavaWeb Servlet中url-pattern的使用3. css代碼優(yōu)化的12個技巧4. 微信開發(fā) 網(wǎng)頁授權(quán)獲取用戶基本信息5. 詳解瀏覽器的緩存機制6. ASP中實現(xiàn)字符部位類似.NET里String對象的PadLeft和PadRight函數(shù)7. jsp+servlet簡單實現(xiàn)上傳文件功能(保存目錄改進)8. asp批量添加修改刪除操作示例代碼9. msxml3.dll 錯誤 800c0019 系統(tǒng)錯誤:-2146697191解決方法10. HTML5 Canvas繪制圖形從入門到精通
