Python高级 02 - 类与对象深度问题及解决技巧

内容

1. 如何派生内置不可变类型并修改其实例化行为

  • 回顾__new__
    Python高级 02 - 类与对象深度问题及解决技巧
  • __new__方法是创建对象的方法
    • 1.此处重写了父类的方法
    • 2.需调用父类的__new__方法创建对象
    • 3.需将对象返回出来给__init__方法
      Python高级 02 - 类与对象深度问题及解决技巧
      Python高级 02 - 类与对象深度问题及解决技巧

Python高级 02 - 类与对象深度问题及解决技巧

Python高级 02 - 类与对象深度问题及解决技巧
Python高级 02 - 类与对象深度问题及解决技巧

Python高级 02 - 类与对象深度问题及解决技巧

2. 如何为创建大量实例节省内存

练习需求
在游戏开发中,有一个玩家类Player,每有一个在线玩家,在服务器内则有一个player的实例,当在线的人数很多时,将产生大量实例(百万级)
如何降低这些大量实例的内存开销?
解决方案:定义类的 _ _ slots _ _ 属性,声明实例有哪些属性(关闭动态绑定)

Python高级 02 - 类与对象深度问题及解决技巧
Python高级 02 - 类与对象深度问题及解决技巧

  • 使用 _ _ dict _ _字典主要是为了提升查询效率,所以必须使用空间换时间
  • 少量的实例,使用字典存储,问题不大。但如果像我们的业务达到数百万个实例,字典占用的总空间就比较大。
  • 这个 _ _ slots _ _ 相当于告诉解释器,实例的属性都叫什么。而且既然需要节省内存,推荐定义时使用元组,而不是列表。
  • _ _ slots _ _是否会继承?
  • _ _ slots _ _不影响子类实例,不会继承,除非子类里面自己定义了

Python高级 02 - 类与对象深度问题及解决技巧
Python高级 02 - 类与对象深度问题及解决技巧
Python高级 02 - 类与对象深度问题及解决技巧