__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. 创建的每个实例都有自己的属性, 方便类中的实例方法调用