__slots__
的作用我们都知道一般的对象我们可以动态的往对象中添加属性,例如:
class A:
def __init__(self, name):
self.name = name
a = A(9)
a.b=10 #动态添加b
print(a.name, a.b)
''' 结果:9 10 '''
为什么会这样呢?一般情况下对象的属性是用字典来保存的,可以让我们在运行程序的过程中动态添加新属性。
但是对于一个固定属性的对象来说用字典来存放属性有很大的内存浪费(字典也是一种数据结构,相对于普通变量而言需要额外的空间来维护),我们想要固定属性的对象不使用字典并且不能动态添加新属性该怎么办?这时候就该__slots__
登场了。
class A:
__slots__ = ['name']
def __init__(self, name):
self.name = name
a = A(9)
a.b=10 #报错
print(a.name, a.b)
''' 结果: Traceback (most recent call last): File "test.py", line 7, in <module> a.b=10 AttributeError: 'A' object has no attribute 'b' '''
__slots__
只需要告诉它这个类产生的对象需要哪些属性就行了,它不会再使用字典来保存属性了,而只申请你需要的空间。