__slots__

一個場景

class Base(object):
    pass
b = Base()
print b.__dict__  # {}
b.a = 'a'
print b.__dict__  # {'a','a'}

我們發現,所有繼承自object類的類的對象都有一個__dict__屬性,這事實上耗費了大量內存(尤其是在需要創建大量對象的程序中)。

slots

通過在類定義中加入__slots__,我們可以限制動態給對象添加屬性的行為,更重要的是,這能大大減少對象所占的內存(對象不再擁有__dict__屬性)。

class Base(object):
    __slots__ = ("a")
b = Base()
b.a = 'a'
b.b = 'b' #報錯,不能添加這個屬性
# AttributeError: 'Base' object has no attribute 'b'
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容