一、背景
由于Python 使用字典来表示类实例的属性,如果编写一个创建了某种类的大量实例的程序,程序突然需要大量的内存,产生速度很快,但内存使用效率却不是很高
python 动态语言,可以在运行过程中,修改实例的属性和增删方法
Python有时我们只想使用固定的属性,不想任意绑定属性
__slots__ 作用
定义__slots__属性时,Python 没有使用字典来表示属性,而是使用小的固定大小的数组,减少每个实例所需的内存
限制对象属性的添加,限制类的实例使用的属性的种类
缺点:不能声明任何新的属性,只能使用__slots__上现有的属性,__slots__的类不能使用多重继承
二、进行对比
python 动态语言,可以随意修改实例的属性和增删方法
class User: pass user = User() user.username = 'zhangsan' user.age = 18 user.sex = 'male' print(user.age) print(user.sex)
如果类需要限制对象属性的添加,限制类的实例使用的属性的种类
user 中只能使用username、age 两个属性class User: __slots__ = ['username', 'age'] user = User() user.username = 'zhangsan' user.age = 18 print(user.age) 加一个username、age 之外的则报错 user.sex = 'male' print(user.sex)
三、优点
类的属性固定的情况,__slots__速度更快、更节省内存