为什么这段代码会为我运行?
class Foo():
__slots__ = []
def __init__(self):
self.should_not_work = "or does it?"
print "This code does not run,",self.should_not_work
Foo()
我认为广告位是一种限制。我正在运行Python 2.6.6。
答案 0 :(得分:9)
__slots__
提供了一个小的内存使用优化,因为它可以阻止分配__dict__
来存储实例的属性。如果您有大量实例,这可能很有用。
您所谈论的限制主要是其实施方式的偶然副作用。特别是,如果您的类继承自没有__dict__
的基类(例如__dict__
),它只会停止创建object
,即使这样,它也不会停止__dict__
1}}在任何子类中分配,除非它们也定义__slots__
。它不是一种安全机制,因此最好不要尝试使用它。
所有旧式课程都会自动获得__dict__
,因此__slots__
无效。如果你继承自object
,你将获得你想要的效果,但基本上不要打扰__slots__
,直到你知道你有数百万个实例并且内存是个问题。
答案 1 :(得分:8)
__slots__
机制适用于新式类。您应该继承object
。
将班级声明更改为
class Foo(object):
# etc...