Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1942876
  • 博文数量: 2504
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 25169
  • 用 户 组: 普通用户
  • 注册时间: 2020-11-26 14:30
个人简介

更多python、Linux、网络安全学习内容,可移步:www.oldboyedu.com或关注\"老男孩Linux\"公众号

文章分类

全部博文(2504)

文章存档

2024年(349)

2023年(643)

2022年(693)

2021年(734)

2020年(80)

我的朋友

分类: Python/Ruby

2023-04-25 11:49:40

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

  打印结果:

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

  初始化对象的值

阅读(167) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~