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多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
python pygame实现五子棋小游戏
Oct 26 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
Django中modelform组件实例用法总结
Feb 10 Python
python多进程下的生产者和消费者模型
May 07 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
pytorch 如何使用amp进行混合精度训练
May 24 Python
python实现简单的聊天小程序
Jul 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
一个目录遍历函数
2006/10/09 PHP
如何过滤高亮显示非法字符
2006/10/09 PHP
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
Python实现Const详解
2015/01/27 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
python字典改变value值方法总结
2019/06/21 Python
使用pip安装python库的多种方式
2019/07/31 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
python中round函数保留两位小数的方法
2020/12/04 Python
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
车辆转让协议书
2014/04/15 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
北京故宫的导游词
2015/01/31 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
Django中celery的使用项目实例
2022/07/07 Python