作用:
属性限制,节省空间内存,提升性能;
默认情况下,类的实例中有一个字典用于存储属性,这对于具有很少实例变量的对象会很浪费空间,当创建大量实例时,会消耗很多空间;
可以通过在类中定义__slots__
来覆盖默认__dict__
行为,内置属性__solts__
声明接收一个实例变量序列,并且在每个实例中只保存足够保存每个变量值的空间,因为没有为每个实例创建__dict__,所以节省空间;
看一下正常的类,每个对象会生成一个__dict__
属性
class MyClass():
pass
t = MyClass()
t.name='小静'
print(t.__dict__)
执行结果:
{'name': '小静'}
添加一个__slots__
class MyClass():
__slots__ = []
pass
t = MyClass()
t.name='小静'
print(t.__dict__)
运行结果:
Traceback (most recent call last):
File "E:/workspace/python/pythonDemo/day01/__solts__.py", line 7, in <module>
t.name='小静'
AttributeError: 'MyClass' object has no attribute 'name'
由结果可知,属性已经被覆盖;
那我们可以根据 __slots__来限制属性,限制了哪些属性才可以使用哪些属性:
class MyClass():
__slots__ = ['name']
pass
t = MyClass()
t.name='小静'
t.age=18
# print(t.__dict__)
print(t.__slots__)
Traceback (most recent call last):
File "E:/workspace/python/pythonDemo/day01/__solts__.py", line 8, in <module>
t.age=18
AttributeError: 'MyClass' object has no attribute 'age'