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__()简析的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Python中的 __new__ 和 __init__

Python-__init__ 和 __new__区别和原理

python __init__() 和__new__()简析

Python中的__init__和__new__介绍

Python类中的__new__和__init__的区别

Python中的__init__和__new__