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的Django框架下管理站点的基本方法
Jul 17 Python
Python编程中的文件操作攻略
Oct 16 Python
pandas 选择某几列的方法
Jul 03 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
python挖矿算力测试程序详解
Jul 03 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
Pytest allure 命令行参数的使用
Apr 18 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
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读取csv文件内容的详解
2013/06/18 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
基于jquery自定义图片热区效果
2012/07/21 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python实现针对中文排序的方法
2017/05/09 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
《第一次抱母亲》教学反思
2014/04/16 职场文书
协议书的格式
2014/04/23 职场文书
爱晚亭导游词
2015/02/09 职场文书
消费者投诉书范文
2015/07/02 职场文书
运动会新闻报道稿
2015/07/22 职场文书
班主任培训研修日志
2015/11/13 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android