__new__和__init__的区别
__init__是当实例对象创建完成后被调用的, 然后设置对象属性的初始值
__new__是在实例创建之前被调用的, 任务就是创建实例然后返回该实例, 是个静态方法
1. __new__方法: 类级别的方法
特性:
1. 是在类准备将自身实例化时调用, 并且至少需要传递一个 cls, 此参数在实例化时由 python 解释器自动提供
2. 始终是类的静态方法, 即使静态方法装饰器
3. 必须要有返回值, 返回实例化出来的实例
2. __init__方法: 实例级别的方法
特性:
1. 有一个参数 self, 该 self 参数就是__new__() 返回的实例
2. __init__() 在__new__() 的基础上完成初始化动作, 不需要返回值
3. 若__new__() 没有正确返回当前类 cls 的实例, 那__init__() 将不会调用
4. 创建的每个实例都有自己的属性, 方便类中的实例方法调用
来源: http://www.bubuko.com/infodetail-3716294.html