Python语言中__init__与__new__的区别

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

  __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."男")

  打印结果:

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

  初始化对象的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值