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使用Django实现博客系统完整版
Sep 29 Python
Python中str.join()简单用法示例
Mar 20 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
python实现AES加密和解密
Mar 27 Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 Python
pymysql 开启调试模式的实现
Sep 24 Python
appium+python adb常用命令分享
Mar 06 Python
python实现飞机大战项目
Mar 11 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
python+selenium实现12306模拟登录的步骤
Jan 21 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
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
python学习入门细节知识点
2018/03/29 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python日志syslog使用原理详解
2020/02/18 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python bisect模块原理及常见实例
2020/06/17 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
网络安全类面试题
2015/08/01 面试题
《再见了,亲人》教学反思
2014/02/26 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
现金出纳岗位职责
2014/03/15 职场文书
男方婚礼答谢词
2015/01/20 职场文书
安全教育第一课观后感
2015/06/17 职场文书
《打电话》教学反思
2016/02/22 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript