在写Python类时 ,或是看一些新项目源代码时,一直看到__init____new__方式 ,一直沒有深入分析二者的差别 ,今日聊一聊这一。

__new__

__new__是类(class)方式  。

class新创建实例时 ,会调用__new__,它关键操纵一个新实例的建立。

必须了解的是,__new__是实例建立的第一步。最先调用它 ,再由它承担回到类的新实例 。

一般,__new__除非是您要承继不能变种类(如str,int ,unicode或tuple),不然无须重新写过 。

对于__new__的使用方法,举例说明:

按照Python官方网文本文档的叫法 ,__new__方式 主要是如果你承继一些不能变的class时(例如int, str, tuple), 出示让你一个自定这种类的实例化全过程的方式。也有便是完成自定的metaclass。

最先大家看来一下第一个作用,实际大家可以用int来做为一个事例:倘若大家必须一个始终是正数的整数金额种类 ,根据集成化 int,大家将会会写成那样的编码 。

但运作后会发觉,結果压根并不是大家想的那般 ,大家依然获得了-3。
这是由于针对int这类 不能变的目标 ,大家仅有轻载它的__new__方式 才可以具有自定的功效。它是改动后的编码:

根据轻载__new__方式 ,大家完成了必须的作用 。

__init__

__init__是实例方式 。

class调用__init__时,是对这一class转化成的新实例初始化 ,初始化的内容,便是__init__内界定的内容。

每新创建一个实例,实例都是初始化这种内容 ,这种内容全是初始化给新创建的实例,跟class不相干 。

__init__不回到任何东西。建立实例后,它仅承担初始化实例 ,且仅在必须初始化一些内容时,才会开展调用。

参照文本文档:
https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new
https://www.cnblogs.com/shenxiaolin/p/9307496.html
文中先发于BigYoung华明镇

文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归QU快排Www.seoGurubLog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▲61910465