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登录QQ邮箱发信的实现代码
Feb 10 Python
Python字典操作简明总结
Apr 13 Python
python去掉空白行的多种实现代码
Mar 19 Python
python3个性签名设计实现代码
Jun 19 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
python爬虫实现中英翻译词典
Jun 25 Python
python二进制文件的转译详解
Jul 03 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python手动或自动协程操作方法解析
Jun 22 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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中for与foreach的区别分析
2011/03/09 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
阿里云ecs服务器中安装部署node.js的步骤
2016/10/08 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
vuex如何重置所有state(可定制)
2019/01/17 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
python通过链接抓取网站详解
2019/11/20 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
python内打印变量之%和f的实例
2020/02/19 Python
python3 配置logging日志类的操作
2020/04/08 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
银行职员思想汇报
2013/12/31 职场文书
党员公开承诺书范文
2014/03/25 职场文书
《四季》教学反思
2014/04/08 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
中学语文教学反思
2016/02/16 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang