python __init__() 和__new__()简析

Posted fiona-zhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python __init__() 和__new__()简析相关的知识,希望对你有一定的参考价值。

先看下面一个例子:

技术分享图片

如上图,例1中,构造了函数Foo,并重写了__new__()和__init__()方法,在实例化Foo()的时候,却只调用了__new__()

例2中,在实例化Too()对象时,同时调用了__new__()和__init__()方法。

 

实例化对象的本质都是三个过程:创建实例对象,初始化实例对象和返回实例化对象

上面函数的__new__()方式,实际上就是在创建实例化对象,它有一个必传的参数,cls:cls是当前正在实例化的类。

而__init__()则是在初始化实例对象。

在开始实例化对象时,程序会调用__new__()方法返回cls(当前类的实例),程序在接收到__new__()返回的实例后,调用__init__()方法初始化实例对象。注意,__new__()如果没有当前类的实例,那么__init__()方法不会被调用(如上图1)。

这里__new__()返回的实例cls将作为参数传递给__init__()方法,即self。

__new__()方法中,cls可以是当前实例化对象,也可以是其他类的实例,如果是其他类的实例,那么只会调用被返回的那个类的构建方法。

 

以上是关于python __init__() 和__new__()简析的主要内容,如果未能解决你的问题,请参考以下文章