概述
python是动态语言,在运行的时候可以动态添加属性。如果要限制在运行的时候给类添加属性,python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性。
只有在__slots__变量中的属性才能被添加,没有在__slots__变量中的属性会添加失败。可以防止其他人在调用类的时候胡乱添加属性或方法。__slots__属性子类不会继承,只有在当前类中有效。
实操
只要没在slots范围内,便会报错
作用
限制要添加的实例属性
可以节约内存空间
一般而言,所有可以用的属性都在字典里面存储,但占用的内存空间大。
如果通过__slots__限制,则数据不会存在字典里,所有可用的属性都存在slots里面了
可以看到,在定义了slots变量之后,steudent类的实例已经不能再随意创建不在__slots__定义的属性了;同时还可以看到,实例当中也不再有__dict__结构了
在继承关系中的使用
子类未声明__slots__时,那么是不会继承父类的__slots__,此时子类是可以随意地属性赋值的
声明一下
子类声明了__slots__时,继承父类的__slots__,也就是子类__slots__的范围是其自身+父类的__slots__
一般而言,在父类__slots__中写过的属性,没必要再在子类__slots__中再写一遍,占用空间大小



