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

时间:2016-05-04 04:32:46

标签: python python-2.7 slots

class Player:
    # __slots__ = ['name','age','gsnum']
    def __init__(self,name,age,gsnum):
        self.name = name
        self.age = age
        self.gsnum = gsnum

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

使用__slots__来节省内存时:

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

这里有什么问题? 32位Python 2.7

1 个答案:

答案 0 :(得分:5)

Python Documentation表示:

  

可以通过在新样式类定义中定义$('.delete-btn').click(function(){ userId = $(this).data('userId'); alert(userId); }); 来覆盖默认值__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

顺便提一下,新类型定义的类是AttributeError,但是我的系统上的插槽是32 bytes