首页 > 编程语言 >Python语言中__init__与__new__的区别是什么?

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

时间:2023-05-23 14:32:34浏览次数:33  
标签:__ name Python self init new id

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

  打印结果:

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

  初始化对象的值

标签:__,name,Python,self,init,new,id
From: https://blog.51cto.com/u_14661964/6331602

相关文章

  • 24K‘膜’出爱车铠甲 释放车主无限魅力,引领隐形车衣潮流!
    隐形车衣的市场经过野蛮生长,年轻一族的消费者们有自己独特的追求和喜爱,拥有自己的一辆汽车后,去贴一张合适的漆面保护膜(隐形车衣),已成为众多车主的必备选择,这也使得24k汽车膜隐形车衣真正成为普通消费品,十分火爆,赢得业界好评。“24k汽车膜”质量不服输,精益求精引关注在当今市场车膜品......
  • 做好个人黄金投资,学习黄金投资交易原则
    随着经济的发展,黄金逐渐成为金融投资的重要工具,越来越多的人开始关注黄金投资。想要做好个人黄金投资,建议先熟悉和学习黄金投资交易原则的内容。黄金投资交易原则一、跟随趋势入场在买入之前,首先应对行情的运行趋势有个明确的判断。一般来说,根据自己的资金实力制定投资策略,是准备......
  • 看海联金汇财务共享智慧平台如何实现以数赋能智慧共享
    海联金汇科技股份有限公司(以下简称海联金汇)财务共享项目旨在实现海联金汇的财务数据深化应用,达到业、财、人、资数据与价值共享,助力海联金汇加速数字化转型,提升公司运营管理能力。 以财务共享作抓手,围绕“164”落实推进 海联金汇在原有子公司信息化应用基础之上进行再度升级,以集......
  • AGIEval: A Human-Centric Benchmark for Evaluating Foundation Models
    AbstractEvaluatingthegeneralabilitiesoffoundationmodelstotacklehuman-leveltasksisavitalaspectoftheirdevelopmentandapplicationinthepursuitofArtificialGeneralIntelligence(AGI).Traditionalbenchmarks,whichrelyonartificialdat......
  • Linux查找文件内容的常用命令方法
    1.从文件内容查找匹配指定字符串的行###grep字符串filenameeg:grep2019on.log2. 从文件内容查找与正则表达式匹配的行  grep-e正则表达式 filename3.查找时不区分大小写 grep-i字符串 filename4.查找匹配的行数  grep-c字符串filenam......
  • 直播平台源码,Layui-open 打开一个新页面
    直播平台源码,Layui-open打开一个新页面         edit:function(){        var_this=this;          varindex=layui.layer.open({            skin:'',          ......
  • Mysql简易安装介绍
    1.建议压缩包安装解压到对应文件,配置环境变量到path:D:\mysql-5.7.19-winx64\bin2.新建mysql配置文件my.ini在mysql根安装目录下新建mysql配置文件my.ini,文件内容如下:[mysqld]basedir=D:\mysql-5.7.19-winx64\datadir=D:\mysql-5.7.19-winx64\data\port=3306skip-gran......
  • form+iframe 实现ajax文件上传
    在做文件上传时除了传入文件外,还有附件参数,并且要求不刷新页面,之前是表单提交的方式,现在修改成ajax上传的方式,由于没有选择用插件,所以用form+iframe的方式,并且这种方式对IE8以上及主流浏览器都支持。1、首先写一个iframe<iframename="myiframe"style="display:none;"onload=......
  • sqlserver 创建表时,为何会出现不支持该后端版本设计数据库关系图或表的提示?
    https://www.null123.com/question/detail-2236078.html同事遇到的问题,查了下记录下:由于使用了错误的SSMS版本(SqlServerManagementStudio),这通常被报告为错误。使用为您的数据库版本设计的版本。您可以使用命令select@@version检查您实际使用的sqlserver版本。此版本的报......
  • UOS下使用HHDESK文本对比功能
    UOS系统从开发至今,虽然进展很大,但受限于一些因素,所支持的功能和软件,目前仍不多。HHDESK便是其中佼佼者之一。此篇介绍的便是HHDESK的一项便捷功能——文本对比。这个功能针对办公人员所开发,使得原本复杂的UOS系统下的操作,变得简单快捷。它能够直观的对文本进行对比,帮您拼凑“碎......