__slots__类属性
字典位于实例的“心脏”,__dict__属性跟踪所有实例属性。举例来说,你有一个实例inst,它
有一个属性foo,那使用inst.foo来访问它与使用inst.__dict__['foo']来访问是一致的。
字典会占据大量内存,如果你有一个属性数量很少的类,但有很多实例,那么正好是这种情况。
为内存上的考虑,用户现在可以使用__slots__属性来替代__dict__。
基本上,__slots__是一个类变量,任何试图创建一个其名不在__slots__中的名字的实例属性都将
导致AttributeError异常。
>>> class SlottedClass(object):... __slots__ = ('foo', 'bar')...>>> c = SlottedClass()>>> c.foo = 42>>> c. xxx = "do"Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'SlottedClass' object has no attribute 'xxx'>>> c.foo42>>> c.barTraceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: bar>>>