标签:__ uid level python self slots name
如果我们想要限制实例的属性,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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
标签:__,uid,level,python,self,slots,name 来源: https://www.cnblogs.com/sidianok/p/12044151.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。