__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.foo
42
>>> c.bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: bar
>>>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值