__init__
在对象初始化的时候调用,我们一般将它理解为"构造函数".
实际上, 当我们调用x = SomeClass()
的时候调用,__init__
并不是第一个执行的, __new__
才是。
所以准确来说,是__new__
和__init__
共同构成了"构造函数".
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
__new__
是用来创建类并返回这个类的实例, 而__init__
只是将传入的参数来初始化该实例.
__new__
在创建一个实例的过程中必定会被调用,但__init__
就不一定,比如通过pickle.load
的方式反序列化一个实例时就不会调用__init__
。
__new__
方法总是需要返回该类的一个实例,而__init__
不能返回除了None的任何值。