使用__slots__是否有缺点?

时间:2019-04-19 19:41:40

标签: python django python-3.x memory-management

我正在使用Python 3.7和Django。我正在阅读有关“ _slots__”-http://book.pythontips.com/en/latest/slots__magic.html 的信息。显然,通过执行此操作,_slots 可以用于优化这些对象的内存分配。

class MyClass(object):
    __slots__ = ['name', 'identifier']
    def __init__(self, name, identifier):
        self.name = name
        self.identifier = identifier
        self.set_up()

我也许很明显的问题是,为什么我们不希望对所有对象都这样做?使用_slots__是否有缺点?

1 个答案:

答案 0 :(得分:1)

Luciano Ramalho

Fluent Python列出了以下警告

  

•您必须记住在每个子类中重新声明__slots__,因为   解释器将忽略继承的属性。

     

•实例将   只能拥有__slots__中列出的属性,除非您   将__dict__包含在__slots__中,但这样做可能会使内存无效   储蓄。

     

•实例不能成为弱引用的目标,除非您   请记住在__weakref__中包含__slots__