__init__
用来初始化一个实例,__new__
用来创建实例,__new__
调用的实质是由类创建对象的过程,而 __init__
则是在实例被创建之后自动调用的。__new__
方法接受的参数虽然也是和 __init__
一样,但 __init__
是在类实例创建之后调用,而 __new__
方法正是创建这个类实例的方法。
Python 的对象不一定要有 __init__
方法,无论它是基类还是子类。因为 __init__
不是构造函数,Python 对象在调用__init__
的时候已被构造出来,称为“初始化”比较合适。 如果一个对象是子类,且需要有 __init__
,那么在 __init__
的第一个语句就是父类的__init__
,调用完后再进行子类的相关初始化,作为方法覆盖。
在 Python 中,类方法的第一个参数表示对象本身,一般使用 self
,在调用一个对象的方法时,对象本身被作为 self
参数传入,也就是说 self
用来指向实例本身。
区别:
__init__
通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后__new__
通常用于控制生成一个新实例的过程