摘要:当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 例如,class Foo(object): slots = [‘foo’]。这样做带来以下优点:

  • 更快的属性访问速度
  • 减少内存消耗

1. slots的实现

我们首先来看看用纯Python是如何实现__slots__ (为了将以下实现的slots与原slots区分开来,代码中用单下划线的_slots_来代替)

class Member(object):
    # 定一描述器实现slots属性的查找
    def __init__(self, i):
        self.i = i
    def __get__(self, obj, type=None):
        return obj._slotvalues(self.i)
    def __set__(self, obj, value):
        obj._slotvalues[self.i] = value