__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'

你可能感兴趣的:(__slots__)