老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Python语言中__init__与__new__的区别是什么?

老男孩IT教育

常见问题

2023年4月25日 09:31

__new__和__init__二者都是Python面向对象语言中的函数,其中__new__比较少用,__init__相对常用,那么两者有什么区别呢?以下是详细的内容:

      __new__和__init__二者都是Python面向对象语言中的函数,其中__new__比较少用,__init__相对常用,那么两者有什么区别呢?以下是详细的内容:

Python培训机构

  __new__作用:创建对象,并分配内存

  __init__作用:初始化对象的值

  注意:

  1、与java相比,java只有一个构造器。而python__new__方法与__init__方法组合,才能称为一个对应类似于java中的构造器

  2、先执行__new__ ,创建对象,并分配内存.

  再执行__init__,初始化对象的值。

  3、任何类都继承于object类。

  我们一般不重写__new__方法。 我们不重写,就默认调用父类的__new__方法。

  4、__new__方法 ,一定要return一个对象。 如果自己重写__new__方法,但是没有return出一个对象。连对象都没创建成功,后面是不会进行初始化对象的。

  例子1:

  class Person(object):

  def __init__(self,name,id,sex):

  self.name = name

  self.id = id

  self.sex = sex

  print("初始化对象的值")

  def __new__(cls, *args, **kwargs):

  print("开始创建对象,并分配内存")

  if __name__== '__main__':

  p = Person("张三",12."男")

  运行结果,只执行了__new__方法,并没有执行__init__方法。

  为啥呢? 因为new函数,没有返回一个对象。

  正确的用法

  class Person(object):

  def __init__(self,name,id,sex):

  self.name = name

  self.id = id

  self.sex = sex

  print("初始化对象的值")

  def __new__(cls, *args, **kwargs):

  print("开始创建对象,并分配内存")

  self = super().__new__(cls)

  return self

  if __name__ == '__main__':

  p = Person("张三",12."男")

  打印结果:

  开始创建对象,并分配内存

  初始化对象的值

      老男孩教育是Python培训领域的专家,2012年就开展了Python培训,是行业较早的Python培训机构,积累了大量的Python培训教学经验,并能全局把控企业用人指标,科学的制定Python教学课程体系,满足5-8年职业生涯需求,让学员轻松拿下高薪职位!

  推荐阅读:

      Python支持的操作系统都有哪些?

      10个超级有用的Python工具!

      Python str里常用的命令都有哪些?

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。