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 相关文章推荐
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
用python制作游戏外挂
Jan 04 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
Python接口自动化测试的实现
Aug 28 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
python regex库实例用法总结
Jan 03 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使用Pthread实现的多线程操作实例
2015/11/14 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
复制本贴标题和地址的js代码
2008/07/01 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
python字符串排序方法
2014/08/29 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python实时监控cpu小工具
2018/06/21 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
劳资员岗位职责
2013/11/11 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
音乐之声观后感
2015/06/04 职场文书
贷款担保书范本
2015/09/22 职场文书