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发送以整个文件夹的内容为附件的邮件的教程
May 06 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
python如何在循环引用中管理内存
Mar 20 Python
django1.11.1 models 数据库同步方法
May 30 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
python程序 创建多线程过程详解
Sep 23 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
Python修改DBF文件指定列
Dec 19 Python
Python学习之迭代器详解
Apr 01 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
php通用防注入程序 推荐
2011/02/26 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
Vue用v-for给src属性赋值的方法
2018/03/03 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
浅谈Python里面小数点精度的控制
2018/07/16 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
后勤自我鉴定
2013/10/13 职场文书
经理秘书找工作求职信
2013/12/19 职场文书
学校消防安全制度
2014/01/30 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
创业计划书之寿司
2019/07/19 职场文书
Python实现老照片修复之上色小技巧
2021/10/16 Python