类的构造器-init和new

提到构造器,大家都会想到 __init__,那么__new__是什么?也是构造器。

 

init 构造器

都很熟悉了,直接上代码

class MyClass(object):def __init__(self):passdef m1(self):print(3)mc = MyClass()
mc.m1()        # 3 

是不是很简单

别急,请跟着我的思路,方法m1的参数有个self,这个self就是实例,在调用m1之前这个实例肯定已经产生了;但是init的参数也有个self,在调用init之前,我们并没有实例化,那这个self从何而来呢?new生成的。

 

new 构造器

1. new 和 init 一样都是类的构造器

2. new在init之前执行,即使没有显示定义

3. new 必须有返回对象,这个对象就是该类的实例,或者父类的实例(该类继承了一个类),并且是new出来的实例,这个实例的就是self,也就是该类的实例化对象。

4. new生成的self传给init,如果没有正确返回实例,init将不会执行。

5. new可以自定义

6. new是类方法,需要显示的传入类cls作为第一个参数,至少要有这个参数

7. 新式类中才有new

8. new和init共用参数,也就是说二者参数形式要一致

几个例子来验证上面8条。

 

代码1

class A(object):def __init__(self,a):print "init"self.a=adef __new__(cls,*args, **kwargs):print "new %s"%clsprint('args:', args)return object.__new__(cls, *args, **kwargs)     # 返回当前类的实例

aa=A(3)
# new <class '__main__.A'>
# ('args:', (3,))
# init
print(aa)       # <__main__.A object at 0x026FC4B0>   
print(aa.a)     # 3                                   self.a

1. 新式类,经典类我试了,不行,new没有运行,但不会报错

2. new 比 init 先执行

3. new 和 init 共用了参数3

4. new 返回了当前类的实例,new出来的

 

代码2

class inch(float):def __new__(cls, arg=0.0):    # cls 相当于 selfprint(1)return float.__new__(cls, arg * 0.0254)def __init__(self, aa):print('aa:', aa)print(2)a = inch(12)    # new 和 init 公用了参数12
# 1
# ('aa:', 12)
# 2
print(a)    # 返回的实例就是new的return,父类的实例 float(12*0.0254)
# 0.3048    =12*0.0254

1. 该类继承了float类

2. new 返回了父类float的实例

3. 该类实例化后其实是new 返回的实例,也就是float(12*0.0254)

 

代码3

class inch2(float):def __new__(cls, arg=0.0):    # cls 相当于 selfprint(11)return float.__new__(cls, arg)*0.0254           # 返回了父类的实例*0.0254def __init__(self,aa):print(22)               # 这句没有被执行,因为new没有正确返回父类的实例

a = inch2(12)
# 11
print(a)
# 0.3048    =12*0.0254

new没有正确返回父类的实例,导致init没有被执行。

转载于:https://www.cnblogs.com/yanshw/p/10697235.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ dll发消息到主窗口_PyQt5学习笔记(五)窗口图形绘制

PyQt5提供了绘制图形的API&#xff0c;支持绘制&#xff1a;文本各种图形&#xff08;直线&#xff0c;点&#xff0c;椭圆&#xff0c;弧&#xff0c;扇形&#xff0c;多边形等&#xff09;图像绘制图形需要一个类QPainter。基本的绘制过程&#xff1a;# 创建QPainter对象 pai…

[jQuery] 针对jQuery性能的优化方法有哪些?

[jQuery] 针对jQuery性能的优化方法有哪些&#xff1f; show slide animate 等频繁修改 dom 很耗性能&#xff0c;可采用 jquery.transit 插件等使用单个 id 或 class 选择器当然也是优化点咯&#xff0c;元素选择器是真的会卡每次调用 $() 其实都是生成一个超大的对象&#xf…

[转] SQL Server中的行列转换问题

原表结构序号性别部门工资1男部门a8002女部门b9003男部门a4004女部门d 14005男部门e12006男部门f5007女部门a 3008男部门d10009女部门d123010女部门b200011男部门c200012男部门b1200最终显示 部门名 人数 男 女 小于800元 从800至999 从1000元至1190元 大于12…

vue-cli@2的原理解析

作为一个菜鸟&#xff0c;我有一颗好奇的心&#xff0c;每当vue init 的时候&#xff0c;看到那流畅的进度和神奇的结果&#xff0c;心里都充满一窥其本质的期望…… 以下就是我不断的console&#xff0c;大致理出来的一个流程心得&#xff0c;纪录在此&#xff0c;以作备忘。 …

怎么用计算机直接截图,电脑截图快捷键怎么使用,电脑怎么快捷键截图

我们对电脑快捷键都不陌生&#xff0c;有快捷键的帮助&#xff0c;我们可以加快电脑操作速度。那不知道大家对电脑截图快捷键有了解吗&#xff1f;下面小编就跟大家分享下电脑截图快捷键的几种使用方法。1. 首先使用电脑自带的截图。我们只需要使用快捷键【PrtScn】即可。在需要…

c语言数组指定位置插入和删除_Apache POI在指定位置插入表格

接到的需求是在模板表格的指定位置再插入表格。比如在模板的${proTable}处插入表格。依赖的包org.apache.poi poi 3.15org.apache.poi poi-ooxml 3.15插入表格由于是在表格里的指定地方插入表格&#xff0c;所以要遍历表格的每个单元格&#xff0c;查找到要插入点的占位符。// …

[jQuery] jQuery与jQuery UI有啥区别?

[jQuery] jQuery与jQuery UI有啥区别&#xff1f; 1&#xff09;jQuery是一个js库&#xff0c;主要提供的功能是选择器、属性修改和事件绑定等 2&#xff09;jQuery UI则是在jQuery的基础上&#xff0c;利用jQuery的扩展性&#xff0c;设计的插件。提供了一些常用的界面元素&a…

学习URLRewriter.dll的使用

1.添加引用 2.配置webconfig webconfig1<?xml version"1.0" encoding"utf-8"?> 2<configuration> 3 4 <configSections> 5 <section name"RewriterConfig" type"URLRewriter.Config.RewriterConfigSerializer…

高斯消元

高斯消元 高斯消元可真是复杂啊。。。。。 高斯消元求解n元一次线性方程组的板子题&#xff1a; P3389 【模板】高斯消元法 举个栗子&#xff1a; 2x y - z 8 -3x - y 2z -11-2x y 2z -3先将它存到矩阵中&#xff1a;②①* (2/3) ③① 接着对①变…

uoni扫地机器人好用吗_扫地机器人好用吗?了解性能看这篇

扫地机器人这类智能家电已经逐渐渗透到大众家庭中,尽管大家对这一品类不再陌生,但对它的性能了解并不全面。况且,市场上扫地机器人产品多不胜数,可实际使用效果和宣称效果存在较大差异。因此建议大家在选购和使用产品时要关注以下几个方面:本文引用地址&#xff1a;http://www.…

[jQuery] jQuery和Zepto的区别?各自的使用场景?

[jQuery] jQuery和Zepto的区别&#xff1f;各自的使用场景&#xff1f; 创建$的方式不同。前者略微要大&#xff0c;后者略微小点。场景....emmmm个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目…

原子微型结构信息应用到局部图形信息存储的猜想

昨天想着看一些图形学方面的知识&#xff0c;在CSDN上看到说Gabor函数可以精确是被图形细微处。于是从网上找了下面这么一篇文章看看&#xff1a; 二、Gabor函数 Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数…

西北大学计算机科学排名,西北大学计算机科学与信息系统Computer Science and Information Systems世界排名2020年最新排名第151-200位(QS世界排名)...

2020年QS计算机科学与信息系统Computer Science and Information Systems专业世界排名公布&#xff0c;西北大学计算机科学与信息系统世界排名第151-200位&#xff0c;西北大学计算机科学与信息系统专业实力怎么样呢&#xff1f;下面美英港新留学介绍西北大学计算机科学与信息系…

Hadoop 集群的三种方式

1,Local(Standalone) Mode 单机模式 $ mkdir input$ cp etc/hadoop/*.xml input$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output dfs[a-z.]$ cat output/* 解析$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-ex…

apache phoenix 入门_实现Phoenix入门

快速入门Phoenix是一个开源的HBASE SQL层。Phoeinx可以用标准的JDBC API替代HBASE client API来创建表&#xff0c;插入和查询查询HBASE中的数据。Phoenix作为应用层和HBASE之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势1. 二级索引支持(global index loc…

腾讯与微软合作,准备应用Silverlight技术

腾讯和微软计划在Silverlight技术上展开深入合作&#xff0c;腾讯后续会在多项业务中应用Silverlight技术&#xff0c;这个视频展示了腾讯使用Silverlight可能应用的场景。查看详情:http://labs.qq.com/e/51/ 转载于:https://www.cnblogs.com/nasa/archive/2008/04/22/1165464.…

如何增强台式计算机无线网络,台式机无线网信号差怎么解决

台式机无线网信号非常的差&#xff0c;玩什么都卡&#xff0c;那么我要怎么样解决呢?下面由小编给你做出详细的台式机无线网信号差解决方法介绍!希望对你有帮助!台式机无线网信号差解决方法一&#xff1a;在确保无线网卡的驱动程序都正确安装的前提下&#xff0c;给出如下建议…

三阶矩阵的lu分解详细步骤_快速入门矩阵运算——开源库Eigen

矩阵是数学中一个重要的工具&#xff0c;广泛应用于各种场景下的数值分析&#xff0c;例如&#xff0c;数字信号处理&#xff0c;图像处理等。我们如何在程序中使用矩阵进行运算呢&#xff1f;本文将为大家介绍一个开源的矩阵运算工具——Eigen。Eigen is a C template library…

【转】接口 与 抽象类

本文转自&#xff1a;http://blog.***/article.asp?id89介绍&#xff1a;在本文中&#xff0c;我将借一个DEMO讨论下接口和抽象类。抽象类和接口的的概念对初学面向对象编程的人来说&#xff0c;总容易迷惑。所以&#xff0c;我试着讨论下两者的理论并比较他们的使用。最后我将…

第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)

题目链接 思路 对于答案&#xff0c;我们考虑对于每个可行的$c$会和多少$d$产生合法序偶。首先证明$c$和$b$必然互质。 假设$c$和$b$不互质&#xff0c;那么设$t_{1}gcd(c, b),(t_{1} > 1)$对于 $(c*d)\%ba$ 等价于 $(k_{1}*t_{1})\%ba,(k_1\in Z)$ $(k_{1}*t_{1})\%(k_{2}*…