Python中new方法的详解


Posted in Python onJanuary 15, 2019

new_ 方法是什么?

__new__方法其实就是创建对象的方法

new()方法是在类准备将自身实例化时调用。

一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前,Python首先调用new()方法:

def new(cls, *args, **kwargs):
…

第一个参数cls是当前正在实例化的类。

如果要得到当前类的实例,应当在当前类中的new()方法语句中调用当前类的父类 的new()方法。

例如,如果当前类是直接继承自object,那当前类的new()方法返回的对象应该为:

def new(cls, *args, **kwargs):
…
return object.new(cls)

通常来说,当前类开始实例化时,new()方法会返回cls(cls指代当前类)的实例,然后该类的init()方法作为构造方法会接收这个实例(即self)作为自己的第一个参数,然后依次传入new ()方法中接收的位置参数和命名参数。

注意:如果new()没有返回cls(即当前类)的实例,那么当前类的init()方法是不会被调用的。

如果new()返回其他类的实例,那么只会调用被返回的那个类的构造方法。

class Foo(object):
def init(self, *args, **kwargs):
pass
def new(cls, *args, **kwargs):
return object.new(Stranger, *args, **kwargs)
class Stranger(object):
pass
foo = Foo()
print(type(foo))
》》》》<class ‘main.Stranger'>

因此可以这么描述new()和ini()的区别,在新式类中new()才是真正的实例化方法,为类提供外壳制造出实例框架,然后调用该框架内的构造方法init()使其丰满。

如果以建房子做比喻,new()方法负责开发地皮,打下地基,并将原料存放在工地。

而init()方法负责从工地取材料建造出地皮开发招标书中规定的大楼,init()负责大楼的细节设计,建造,装修使其可交付给客户。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python中实现参数类型检查的简单方法
Apr 21 Python
编写Python脚本来获取Google搜索结果的示例
May 04 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
python3实现无权最短路径的方法
May 12 Python
Python之循环结构
Jan 15 #Python
python实现图片彩色转化为素描
Jan 15 #Python
带你认识Django
Jan 15 #Python
Python数据可视化库seaborn的使用总结
Jan 15 #Python
使用Django连接Mysql数据库步骤
Jan 15 #Python
Django框架模板介绍
Jan 15 #Python
python使用PIL实现多张图片垂直合并
Jan 15 #Python
You might like
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
javascript 获取网页标题代码实例
2014/01/22 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
基于element-ui的rules中正则表达式
2018/09/04 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
python回调函数用法实例分析
2015/05/09 Python
Python探索之pLSA实现代码
2017/10/25 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python3 读取Word文件方式
2020/02/13 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
办公室主任岗位职责
2013/11/08 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
工程部部长岗位职责
2015/02/12 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书