一個場景
class Base(object):
pass
b = Base()
print b.__dict__ # {}
b.a = 'a'
print b.__dict__ # {'a','a'}
我們發(fā)現(xiàn),所有繼承自object類的類的對象都有一個__dict__屬性钳恕,這事實上耗費了大量內存(尤其是在需要創(chuàng)建大量對象的程序中)。
slots
通過在類定義中加入__slots__,我們可以限制動態(tài)給對象添加屬性的行為远豺,更重要的是专执,這能大大減少對象所占的內存(對象不再擁有__dict__屬性)淮捆。
class Base(object):
__slots__ = ("a")
b = Base()
b.a = 'a'
b.b = 'b' #報錯,不能添加這個屬性
# AttributeError: 'Base' object has no attribute 'b'