浅谈pyhon中的__slots__

python对象和类都是利用__dict__设置动态属性,例如下面

class Student:pass
s = Student()
s.name="ttt"

def set_age(self,age):
    self.age =age
    
Student.set_age =  set_age
Student.__dict__

g = Student()
g.set_age("ff")

在这里插入图片描述

通过上面的例子解释了python对象属性都是可以动态添加

而__slots__的作用是防止类和对象属性无节制的添加,

class Student:
    __slots__=("name")

n = Student()
n.name = "ff"
n.age= "f"

在这里插入图片描述
当添加不在__slots__定义的属性时,python就会报错
下面就来聊聊关于__slots__继承问题

  • 当父类有__slots__子类没有时,子类可以看作正常的__dict__
  • 当父类有__slots__子类有时,子类可以看作__slots__,并继承父类的
  • 当父类没有有__slots__子类有时,子类可以看作__slots__,
class SStudent(Student):
    pass

ss = SStudent()
ss.age ="gg"

class pStudent(Student):
    __slots__ = ("sex")

pp = pStudent()
pp.name = "aa"
pp.sex =  0
pp.age = "ff"

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值