Python 使用插槽有缺点吗?

Python 使用插槽有缺点吗?,python,django,python-3.x,memory-management,Python,Django,Python 3.x,Memory Management,我正在使用Python3.7和Django。我在读关于“槽”的书。显然,通过这样做,_slot可以用于优化大量这些对象的内存分配 class MyClass(object): __slots__ = ['name', 'identifier'] def __init__(self, name, identifier): self.name = name self.identifier = identifier self.set_up

我正在使用Python3.7和Django。我在读关于“槽”的书。显然,通过这样做,_slot可以用于优化大量这些对象的内存分配

class MyClass(object):
    __slots__ = ['name', 'identifier']
    def __init__(self, name, identifier):
        self.name = name
        self.identifier = identifier
        self.set_up()
我的问题很明显,为什么我们不想对所有对象都这样做?使用卢西亚诺·拉马霍的《插槽》有缺点吗?

列出了以下注意事项

•由于 解释器将忽略继承的属性

•实例将 只能在
插槽中列出属性,除非
在
\uuuuu插槽中包含
\uuuuu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
储蓄

•实例不能成为弱引用的目标,除非 请记住在
\uuuuuuuuuuuuuuuuuu插槽中包含
\uuuuuuuuwakref\uuuuuuuuuu


主观(或基于上下文)的缺点:动态属性分配不再有效,因为没有
\uuuu dict\uuuu
。这怎么不是一个重复。很多很多非常有用的信息我是Python的新手,所以我可能过于简单化了你的答案,但从我所读的内容来看,唯一的缺点是你必须在模型中添加更多的代码。我读对了吗?是的,太简单了。子类中的更多代码(因为父类中的
\uuuuuu slots\uuuuu
被忽略)和动态属性将不起作用(除非您执行第二个要点中所述的操作,这有点违背插槽的用途)。@Dušan Maďar我不理解您的第一点。我刚刚进行了实验(Python3.7.3),继承似乎像我预期的那样工作。就是,一个没有uuu插槽但从一个有uuu插槽的类派生的类的实例将有一个uu dict uu,因此可以动态添加新成员,但是分配给父类的uu插槽中声明的变量将不会,并且对象的uu dict u的条目。@Dušan Maďar您的第二点可能有资格作为警告,但我不会称之为警告缺点我认为这是一个类应该做的事情。如果需要向单个实例添加任意属性,则不应使用类。除了不为每个对象创建字典所节省的内存之外,这还可以对键入错误进行有用的检查。@Dušan Maďar我很抱歉将引用与认可混为一谈。我认为,当你准备引用它们时,你会愿意为它们辩护。我认为,除了异国情调的情况(您使用弱引用的频率有多高?)之外,每个类声明后面都应该跟有_uslots。它的非普遍性,至少在我看过的Python代码中,表明我错了。我还在想为什么。