首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

_slots_类属性

2012-08-31 
__slots__类属性字典位于实例的“心脏”,__dict__属性跟踪所有实例属性。举例来说,你有一个实例inst,它有一个

__slots__类属性
字典位于实例的“心脏”,__dict__属性跟踪所有实例属性。举例来说,你有一个实例inst,它
有一个属性foo,那使用inst.foo来访问它与使用inst.__dict__['foo']来访问是一致的。

字典会占据大量内存,如果你有一个属性数量很少的类,但有很多实例,那么正好是这种情况。
为内存上的考虑,用户现在可以使用__slots__属性来替代__dict__。

基本上,__slots__是一个类变量,任何试图创建一个其名不在__slots__中的名字的实例属性都将
导致AttributeError异常。

>>> class SlottedClass(object):...     __slots__ = ('foo', 'bar')...>>> c = SlottedClass()>>> c.foo = 42>>> c. xxx = "do"Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'SlottedClass' object has no attribute 'xxx'>>> c.foo42>>> c.barTraceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: bar>>>

这种特性的主要目的是节约内存。其副作用是某种类型的“安全”,它能防止用户随心所欲的
动态增加实例属性。带__slots__属性的类定义不会存在__dict__了(除非你在__slots__中增
加'__dict__'元素)

热点排行