python __new__ __init__,python中__new__的用法
__新_ _和__init__的区别主要表现在:
它自身的区别;
在计算机编程语言中新式类和老式类的定义。
__新_ _负责对象的创建,而__init__负责对象的初始化。
__新__:创建对象时调用,会返回当前对象的一个实例
__init__:创建完对象后调用,对当前对象的一些实例初始化,无返回值
1. 在类中,如果__new__和__init__同时存在,会优先调用__new__
classClsTest(object):
def__init__(self):
打印("初始化")
def__new__(cls,*args,**kwargs):
打印("新建")
ClsTest()输出
新2. 如果__new__返回一个对象的实例,会隐式调用__init__
代码实例:
classClsTest(object):
def__init__(self):
打印("初始化")
def__new__(cls,*args,**kwargs):
打印(新% s“% cls”)
returnobject .__new__(cls,*args,**kwargs)
ClsTest()输出
new class _ _ main _ _ . 1 ClsTest
初始化3. __new__方法会返回所构造的对象,__init__则不会。__init__无返回值。
classClsTest(object):
def__init__(cls):
cls.x=2
打印("初始化")
returncls
ClsTest()输出
初始化
回溯(mostrecentcalllast):
文件标准输入,第数字一(one)行,在模块中
TypeError:__init__()应返回没有,而不是「cls测试」4. 若__new__没有正确返回当前类cls的实例,那__init__是不会被调用的,即使是父类的实例也不行
classClsTest1(对象):
及格
类别类别测试2(类别测试1):
def__init__(self):
打印("初始化")
def__new__(cls,*args,**kwargs):
打印(新% s“% cls”)
returnobject .__new__(ClsTest1,*args,**kwargs)
b=ClsTest2()
打印(类型(b))输出
newclass__main__.ClsTest2
类“_ _ main _ _”。clstest 1 总结
1.继承自目标的新式类才有__新_ _
2.__新_ _至少要有一个参数cls,代表要实例化的类,此参数在实例化时由计算机编程语言解释器自动提供,__新_ _必须要有返回值,返回实例化出来的实例,可以返回父类__新_ _出来的实例,或者直接是目标的__新_ _出来的实例
3.__init__有一个参数自我,就是这个__新_ _返回的实例,__init__在__新_ _的基础上可以完成一些其它初始化的动作,__init__不需要返回值
4.如果__新_ _返回一个对象的实例,会隐式调用__init__。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。