python中的__init__ 、__new__、__call__小结


Posted in Python onApril 25, 2014

1.__new__(cls, *args, **kwargs)  创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身
2.__init__(self, *args, **kwargs) 创建完对象后调用,对当前对象的实例的一些初始化,无返回值,即在调用__new__之后,根据返回的实例初始化;注意,这里的第一个参数是self即对象本身【注意和new的区别】
3.__call__(self,  *args, **kwargs) 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
 

看具体的例子:

class O(object):
    def __init__(self, *args, **kwargs):
        print "init"
        super(O, self).__init__(*args, **kwargs)
    def __new__(cls, *args, **kwargs):
        print "new", cls
        return super(O, cls).__new__(cls, *args, **kwargs)
    def __call__(self,  *args, **kwargs):
        print "call"
       
    oo = O()
    print "________"
    oo() 

打印出来的是:
new
init
________
call

比如:Python Singleton(单例模式)实现,那我们是不是只是重载一些__new__方法就可以了
class Singleton1(object):
    """ 重载new方法"""
    def __new__(cls, *args, **kwargs):
        if not "_instance" in vars(cls):
            cls._instance = super(Singleton1, cls).__new__(cls, *args, **kwargs)
        return cls._instance

可不可以重载__init__方法呢?明显不可以,因为__init__之前调用了__new__方法,这时候已经生成了一个对象了,没办法实现单例模式

Python 相关文章推荐
Python pass详细介绍及实例代码
Nov 24 Python
python模块之re正则表达式详解
Feb 03 Python
Python实现句子翻译功能
Nov 14 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
django框架F&Q 聚合与分组操作示例
Dec 12 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
python如何输出反斜杠
Jun 18 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
超级详细实用的pycharm常用快捷键
May 12 Python
Python yield 小结和实例
Apr 25 #Python
python计数排序和基数排序算法实例
Apr 25 #Python
python处理圆角图片、圆形图片的例子
Apr 25 #Python
python实现的阳历转阴历(农历)算法
Apr 25 #Python
Python实现的简单万年历例子分享
Apr 25 #Python
python实现simhash算法实例
Apr 25 #Python
python实现DNS正向查询、反向查询的例子
Apr 25 #Python
You might like
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
一个简单计数器的源代码
2006/10/09 PHP
php实现webservice实例
2014/11/06 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python正则表达式介绍
2012/08/06 Python
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
Python中的__slots__示例详解
2017/07/06 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
python GUI模拟实现计算器
2020/06/22 Python
写演讲稿要注意的六件事
2014/01/14 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书