__slots__Python中的目的是什么?特别是关于什么时候使用它,什么时候不使用它?
你会想使用__slots__,如果你要实例化同一个类的对象很多(几百,几千)。__slots__只存在作为一个内存优化工具。
__slots__用于约束属性创建是非常令人沮丧的,一般而言,您希望避免它,因为它会破坏pickle,还有一些其他的python内省功能。
正确使用__slots__是节省空间的对象。而不是有一个动态的字典,允许随时添加属性的对象,有一个静态结构,不允许添加后创建。[这个用法__slots__消除了每个对象的一个字典的开销]。虽然这有时是一个有用的优化,但是如果Python解释器足够动态,那么这将是完全没有必要的,这样当实际上添加到目的。
不幸的是,插槽有一个副作用。它们以一种可以被控制怪物和静态打字机器滥用的方式来改变具有插槽的对象的行为。这是不好的,因为控制怪物应该滥用元类,静态类型的小丑应该滥用装饰器,因为在Python中,应该只有一个明显的做法。
让CPython足够聪明来处理没有空间的存储__slots__是一项重大的任务,这可能是为什么它不在P3k(尚未)的变化列表中。