python- __slot__特殊变量解析

我们都知道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。尽量不要让子类和父类里的数据重复,因为那样在某种程度上也会浪费一定内存。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<往事随风>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值