魔法方法
最长使用的魔术方法就是init,在定义一个类的时候需要声明的初始化方法,但是init并不是第一个被使用的魔术方法,在初始化前最先调用的是new,这个方法首先创建一个实例,然后再使用init初始化实例,在实例的声明周期里面,del最后被调用,删除实例。
当调用x = SomeClass()
的时候调用,__init__
并不是第一个执行的, __new__
才是。所以准确来说,是__new__
和__init__
共同构成了"构造函数".
__new__
是用来创建类并返回这个类的实例, 而__init__
只是将传入的参数来初始化该实例.
__new__
在创建一个实例的过程中必定会被调用,但__init__
就不一定,比如通过pickle.load
的方式反序列化一个实例时就不会调用__init__
。
__new__
方法总是需要返回该类的一个实例,而__init__
不能返回除了None的任何值