我正在使用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__是否有缺点?
答案 0 :(得分:1)
Fluent Python列出了以下警告
•您必须记住在每个子类中重新声明
__slots__
,因为 解释器将忽略继承的属性。•实例将 只能拥有
__slots__
中列出的属性,除非您 将__dict__
包含在__slots__
中,但这样做可能会使内存无效 储蓄。•实例不能成为弱引用的目标,除非您 请记住在
__weakref__
中包含__slots__
。