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使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
python实现转圈打印矩阵
Mar 02 Python
详解Python:面向对象编程
Apr 10 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
Django框架模板的使用方法示例
May 25 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
python文本数据处理学习笔记详解
Jun 17 Python
简单了解Python3里的一些新特性
Jul 13 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
使用pandas的box_plot去除异常值
Dec 10 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
Django权限设置及验证方式
May 13 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
Puppet的一些技巧
2018/09/17 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python多进程写入同一文件的方法
2019/01/14 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
社保委托书怎么写
2014/08/02 职场文书
庆祝国庆节标语
2014/10/09 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
武当山导游词
2015/02/03 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
python数字图像处理:图像的绘制
2022/06/28 Python