这个问题:Usage of __slots__?答案__slots__
可以让属性访问速度更快。但我想知道为什么?
当我们在课程中定义__slots__
时会发生什么?
答案 0 :(得分:3)
至于为什么 访问更快Guido talks about it here:
特别是,为了使数据描述符正常工作,任何 操纵对象的属性首先需要检查对象的属性 类字典,看看该属性是否实际上是一个数据 描述。如果是,则描述符用于处理属性 访问而不是按原样手动操作实例字典 通常情况下。但是,这个额外的检查也意味着额外的 在检查每个字典之前执行查找 实例。因此,使用
__slots__
是优化查找的一种方法 数据属性 - 一个后备,如果你愿意的话,以防万一 对新课程系统的性能影响感到失望。
答案 1 :(得分:1)
来自文档(slots):
默认情况下,旧式和新式类的实例都有一个属性存储字典。这会浪费具有很少实例变量的对象的空间。在创建大量实例时,空间消耗会变得很严重。
可以通过在新样式类定义中定义
__slots__
来覆盖默认值。__slots__
声明采用一系列实例变量,并在每个实例中保留足够的空间来保存每个变量的值。保存空间是因为没有为每个实例创建__dict__
。
使用__slots__
可以优化内存和性能。