繁体   English   中英

我不知道如何使__slots__工作

[英]I don't know how to make __slots__ work

为什么这个代码会为我运行?

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。

__slots__提供了一个小的内存使用优化,因为它可以防止__dict__被分配来存储实例的属性。 如果您有大量实例,这可能很有用。

你所谈论的限制主要是它实施方式的偶然副作用。 特别是它只停止创建一个__dict__如果你的类继承自没有__dict__的基类(比如object ),即使那样它也不会停止在任何子类中分配__dict__ ,除非它们也定义__slots__ 它不是一种安全机制,因此最好不要尝试使用它。

所有旧式类都会自动获取__dict__ ,因此__slots__无效。 如果你从object继承,你将获得你正在寻找的效果,但基本上不要打扰__slots__直到你知道你有数百万个实例和内存是一个问题。

__slots__机制适用于新式类。 你应该继承自object

将类声明更改为

class Foo(object):
  # etc...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM