双下new与双下init的区别与联系

一、定义

__new__:构造方法,通常用于控制生成一个新实例的过程,它是类级别的方法

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

二、区别

__new__:创建一个新实例化对象时触发__new__,生成一个新实例

__init__:实例化对象生成后触发__init__,来进行实例的初始化

当二者同时存在且new返回的是本类实例对象时,new先触发,init再new后面触发;

当二者同时存在且new返回的是其他类实例对象时,new先触发,init不触发;

三、传参

__new__:必须传参,必须传入cls,其他参数酌情传参

__init__:不必须传参,可以不进行传参

四、返回值

__new__:至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供,__new__必须要有返回值,返回实例化出来的实例,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例。

根据传参返回的实例对象,如果返回的是本类实例对象时,才会调用本类的初始化方法(__init__);如果返回的是其他类的实例对象,则不会调用本类的初始化方法(__init__)

__init__:没有返回值
posted @ 2022-11-14 16:46  张张包~  阅读(29)  评论(0编辑  收藏  举报