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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
Python实现excel转sqlite的方法
Jul 17 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
python 实现敏感词过滤的方法
Jan 21 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
Django中的AutoField字段使用
May 18 Python
python线性插值解析
Jul 05 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
python 合并多个excel中同名的sheet
Jan 22 Python
用python制作个音乐下载器
Jan 30 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
晶体管单管来复再生式收音机
2021/03/02 无线电
PHP实现分页的一个示例
2006/10/09 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
JS获取鼠标坐标位置实例分析
2016/01/20 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
简单的JAVA编程面试题
2013/03/19 面试题
博士学位自我鉴定范文
2013/12/26 职场文书
益达广告词
2014/03/14 职场文书
学生党员检讨书范文
2014/12/27 职场文书
公司员工手册范本
2015/05/14 职场文书
刑事申诉状范文
2015/05/20 职场文书
个人借条范本
2015/05/25 职场文书
开天辟地观后感
2015/06/09 职场文书
七一活动主持词
2015/06/29 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL