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 with的用法
Aug 22 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
python直接访问私有属性的简单方法
Jul 25 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Django如何配置mysql数据库
May 04 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
Python lxml模块的基本使用方法分析
Dec 21 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 Python
Python如何对XML 解析
Jun 28 Python
python Cartopy的基础使用详解
Nov 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
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
jQuery 注意事项 与原因分析
2009/04/24 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
python查看微信好友是否删除自己
2016/12/19 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
python 调用钉钉机器人的方法
2019/02/20 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
DNA基因检测和分析:23andMe
2019/05/01 全球购物
超市总经理岗位职责
2014/02/02 职场文书
新年晚会主持词
2014/03/24 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
解放思想演讲稿
2014/09/11 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
信息合作协议书
2014/10/09 职场文书
五好家庭事迹材料
2014/12/20 职场文书
教师党员个人总结
2015/02/10 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL