06.15 Python 的 Slots

Python 的 Slots

对象的属性是存储在一个字典中的。使用字典意味着数量是不固定的,可以增加属性到这个字典中。

例如:

Python 的 Slots

输出:

Python 的 Slots

对象 c 增加了两个属性:a 和 x,通过访问对象的 __dict__ 字典,可以看到这两个属性以及他们的值。

但是,你不能对系统内置的类型增加新的属性,例如 int、list

Python 的 Slots

使用字典存储属性是非常便利的,我们可以随时增加新的属性。但是这样是很浪费空间的,尤其是你要创建大量的对象时。

Slots 就是要解决这个问题的,使用 Slots,不能动态的添加属性,它提供了一个静态的数据结构。

当创建一个类的时候,使用属性 __slots__,声明一个列表,列表中必须包含你要使用的所有的属性。我们通过如下的类解释。

Python 的 Slots

输出:

Python 的 Slots

使用 __slots__ 后,除了定义的属性名称外,再访问未知的属性,会触发 AttributeError 错误。

使用 __slots__ 可以节省空间,但是从 Python 3.3 后,这个特性就不那么明显了。Python 3.3 之后,使用 Key-Sharing Dictionaries 存储对象。属性可以在多个对象之间共享存储,这样会减少程序占用的空间。


分享到:


相關文章: