Python中__init__与__new__的区别

__init__ 用来初始化一个实例,__new__ 用来创建实例,__new__ 调用的实质是由类创建对象的过程,而 __init__ 则是在实例被创建之后自动调用的。__new__ 方法接受的参数虽然也是和 __init__ 一样,但 __init__ 是在类实例创建之后调用,而 __new__ 方法正是创建这个类实例的方法。

Python 的对象不一定要有 __init__ 方法,无论它是基类还是子类。因为 __init__ 不是构造函数,Python 对象在调用__init__ 的时候已被构造出来,称为“初始化”比较合适。 如果一个对象是子类,且需要有 __init__ ,那么在 __init__ 的第一个语句就是父类的__init__ ,调用完后再进行子类的相关初始化,作为方法覆盖。

在 Python 中,类方法的第一个参数表示对象本身,一般使用 self ,在调用一个对象的方法时,对象本身被作为 self 参数传入,也就是说 self 用来指向实例本身。

区别:

  • __init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后
  • __new__ 通常用于控制生成一个新实例的过程

参考资料

赞赏是对作者最大的支持!
0%