为什么python __slots__不能保存内存?

Eri*_*ang 2 python slots python-2.7

class Player:
    # __slots__ = ['name','age','gsnum']
    def __init__(self,name,age,gsnum):
        self.name = name
        self.age = age
        self.gsnum = gsnum
Run Code Online (Sandbox Code Playgroud)

我定义了这个类,有三个属性

__slots__用于节省内存时:

我得到36个一个实例(sys.getsizeof())如果没有使用__slots__,我仍然得到36作为内存大小,

这有什么问题?32位Python 2.7

Ser*_*lis 5

Python文档指出:

可以通过__slots__ 在新样式类定义中定义来覆盖默认值.该__slots__声明需要实例变量和储备只够空间的序列中的每个实例来保存每个变量的值.保存空间是因为__dict__没有为每个实例创建空间.

强调我的.

这意味着您的类定义必须如下所示:

class Player(object):
    __slots__ = ['name','age','gsnum']
    def __init__(self,name,age,gsnum):
        self.name = name
        self.age = age
        self.gsnum = gsnum
Run Code Online (Sandbox Code Playgroud)

如果您尝试分配插槽定义中不存在的变量,则可以判断您是否正确.你会得到一个AttributeError.

顺便提一下,对于新类型类定义,类是在我的系统上32 bytes使用插槽36 bytes.