我们都知道python中的类可以在运行时对其动态添加任意的属性和方法,但是如果我们想要限制其添加某些属性,就可以对类声明一个特殊的变量__slot__,同时我们知道类的属性默认是以字典的形式储存在类中,这无疑会占用很大的内存,所以当我们想优化代码时,就可以在类中声明__slot__特殊变量(元组)。下面以来代码来讲解:
# 作用
# 限制要添加的实例属性
# 节约内存空间
class Stu(object):#继承超类
__slots__ = ('name','age','score')#元组类型
def __str__(self):
return '{}今年{}'.format(self.name,self.age)
pass
xw=Stu()
xw.name='xx'
xw.age=19
xw.score=100 # 没有在范围内 所以报错
class subStu(Stu):
__slots__ = ('gender','pro')
pass
ln=subStu()
ln.gender='男'
ln.pro='计算机信息管理'
print(ln.gender,ln.pro)
所有可以用的属性都在实例存储,不足的地方就是占用的内存空间大,在定义了 slots变量之后 Stu类的实例已经不能随意创建不在 slots 变量中定义的属性了,同时还可以看到实例当中也不存在有 dict,节省了大量空间。
下面将substu作为子类继承stu父类,当子类未声明 slots 时,那么是不会继承父类的slots,此时子类是可以随意的属性赋值的。一旦子类也定义了slot变量,就会继承父类的slots,也就是子类slots的范围是为其自身+父类的slots。尽量不要让子类和父类里的数据重复,因为那样在某种程度上也会浪费一定内存。