Python高级 02 - 类与对象深度问题及解决技巧
内容
1. 如何派生内置不可变类型并修改其实例化行为
- 回顾__new__
- __new__方法是创建对象的方法
- 1.此处重写了父类的方法
- 2.需调用父类的__new__方法创建对象
- 3.需将对象返回出来给__init__方法
2. 如何为创建大量实例节省内存
练习需求
在游戏开发中,有一个玩家类Player,每有一个在线玩家,在服务器内则有一个player的实例,当在线的人数很多时,将产生大量实例(百万级)
如何降低这些大量实例的内存开销?
解决方案:定义类的 _ _ slots _ _ 属性,声明实例有哪些属性(关闭动态绑定)
- 使用 _ _ dict _ _字典主要是为了提升查询效率,所以必须使用空间换时间
- 少量的实例,使用字典存储,问题不大。但如果像我们的业务达到数百万个实例,字典占用的总空间就比较大。
- 这个 _ _ slots _ _ 相当于告诉解释器,实例的属性都叫什么。而且既然需要节省内存,推荐定义时使用元组,而不是列表。
- _ _ slots _ _是否会继承?
- _ _ slots _ _不影响子类实例,不会继承,除非子类里面自己定义了