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 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python模块搜索概念介绍及模块安装方法介绍
Jun 03 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
pandas表连接 索引上的合并方法
Jun 08 Python
Python利用递归实现文件的复制方法
Oct 27 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
python -v 报错问题的解决方法
Sep 15 Python
python录音并调用百度语音识别接口的示例
Dec 01 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
一行代码python实现文件共享服务器
Apr 22 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
深入了解php4(2)--重访过去
2006/10/09 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
PDO::prepare讲解
2019/01/29 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
innerText 使用示例
2014/01/23 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
微信小程序实现聊天室
2020/08/21 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
VUE实现吸底按钮
2021/03/04 Vue.js
Python深入学习之上下文管理器
2014/08/31 Python
Python中的类学习笔记
2014/09/23 Python
Python编程实现正则删除命令功能
2017/08/30 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
Python小白垃圾回收机制入门
2020/06/09 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
python 下划线的不同用法
2020/10/24 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
Golang中interface{}转为数组的操作
2021/04/30 Golang
js中Object.create实例用法详解
2021/10/05 Javascript