python中的__slots__使用(转)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python中的__slots__使用(转),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1299字,纯文字阅读大概需要2分钟。
内容图文
![python中的__slots__使用(转)](/upload/InfoBanner/zyjiaocheng/650/c50a4da512414b2ab232b9fbbb38d809.jpg)
如果我们想要限制实例的属性,Python允许在定义class的时候,定义一个特殊的slots变量,来限制该class实例能添加的属性。
使用slots要注意,slots定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
除非在子类中也定义slots,这样,子类实例允许定义的属性就是自身的slots加上父类的slots。
# coding:utf-8 class Player(object): def __init__(self, uid, name, stat=0, level=1): self.uid = uid self.name = name self.stat = stat self.level = level class Player2(object): __slots__ = ['uid', 'name', 'stat', 'level', 'sex'] def __init__(self, uid, name, stat=0, level=1): self.uid = uid self.name = name self.stat = stat self.level = level class Player3(Player2): def __init__(self, uid, name): super(Player3, self).__init__(uid, name) class Player4(Player2): __slots__ = ['age'] def __init__(self, uid, name): super(Player4, self).__init__(uid, name)
slots应用实例
如何为创建大量实例节省内存?
问题:某游戏中,定义了玩家类Player(uid, name, status...),每有一个在线玩家,在服务器程序内则有一个Player的实例,当在线人数很多时,将产生大量实例(如百万级)
解决方案:定义类的slots属性,它时用来声明实例属性名字的列表。
交互模式下看到p1和p2的属性,p1比p2使用的内存多,为什么呢,通过对比发现,属性多了__dict__
和__weakref__
作者:udhga
链接:https://www.jianshu.com/p/c4484f424ef7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内容总结
以上是互联网集市为您收集整理的python中的__slots__使用(转)全部内容,希望文章能够帮你解决python中的__slots__使用(转)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。