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 23 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
May 25 Python
Python环境变量设置方法
Aug 28 Python
Python实现购物系统(示例讲解)
Sep 13 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
python实现用户答题功能
Jan 17 Python
python操作kafka实践的示例代码
Jun 19 Python
Python hashlib模块加密过程解析
Nov 05 Python
python-视频分帧&amp;多帧合成视频实例
Dec 10 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 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安装全攻略:APACHE
2006/10/09 PHP
php adodb连接不同数据库
2009/03/19 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python 正则表达式操作指南
2009/05/04 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
汇科协同Java笔试题
2012/03/31 面试题
生物学专业求职信
2014/07/23 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
毕业生对母校寄语
2015/02/26 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
多人股份制合作协议书
2016/03/19 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python