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__区别和原理