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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python的SQLAlchemy框架使用入门
Apr 29 Python
详解Python的Django框架中的templates设置
May 11 Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
python实现RSA加密(解密)算法
Feb 17 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
Python实现计算对象的内存大小示例
Jul 10 Python
Python文件读写w+和r+区别解析
Mar 26 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
教你怎么用Python监控愉客行车程
Apr 29 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
使用数据库保存session的方法
2006/10/09 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
Python 字符串大小写转换的简单实例
2017/01/21 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
元旦晚会邀请函
2014/01/27 职场文书
运动会稿件50字
2014/02/17 职场文书
保护野生动物倡议书
2014/05/16 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python