看这个Python文档的这部分: https://docs.python.org/3/library/stdtypes.html#typeiter
里面关于迭代器类型,有几个地方提到了slot这个东西:
1.This method corresponds to the tp_iter slot of the type structure for Python objects in the Python/C API.
2.This method corresponds to the tp_iter slot of the type structure for Python objects in the Python/C API.
3.This method corresponds to the tp_iternext slot of the type structure for Python objects in the Python/C API.
就是每个方法讲完,最后都有这么一句。那么这些句子怎么理解,特别是slot是什么东西!求解释或相关资料。
谷歌之后也没找到答案。
1
mengzhuo 2015-01-15 15:09:01 +08:00 via iPhone
slot
指定以后 就不能添加其他attr 最大的作用是省内存 |
3
BiggerLonger 2015-01-15 15:16:25 +08:00
当一个类指定了__slot__的时候, 由这个类实例化的对象将不会存在__dict__这个属性, 因此对象无法添加删除属性, 而由于对象少了__dict__属性, 在需要创建大量的这样的对象的时候, 会节省不少内存.
|
4
vJianZhen OP @BiggerLonger 你说的的确讲得通。但是放在这几句话里还是觉得很违和,不知道该怎么理解这几句话
|
5
ruoyu0088 2015-01-15 15:54:36 +08:00
就是PyTypeObject结构体的字段:
https://github.com/python/cpython/blob/master/Include/object.h#L338 |
7
bjzhush 2015-01-15 16:34:33 +08:00
既然有人正好问到这个问题,我求指教下.
py2.7中,slot不生效,不知道是我写的有问题还是什么问题呢.. code: class Rog(): __slots__ = ('name', 'age') pass r = Rog() r.xxx = 'xxxval' print r.xxx 执行结果 zs@zsLinux:~/python$ python /tmp/x.py xxxval python版本 zs@zsLinux:~/python$ python Python 2.7.3 (default, Feb 27 2014, 19:58:35) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 求指教,为什么slot不生效呢? |
8
skybr 2015-01-15 16:44:35 +08:00 1
@bjzhush __slots__是针对new-style class, 你没继承object, 生成的是old-style class
|
9
pheyer 2015-01-15 16:46:55 +08:00
QT里面好像也有一个东东叫slot
|
11
washinriver 2015-01-15 17:13:30 +08:00
楼上几位说的挺清楚了,我再贴个网上的例子,用slot以减少9g内存空间。
http://tech.oyster.com/save-ram-with-python-slots/ |