python __new__ __init__,python中__new__的用法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: