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异常和文件处理机制详解
Jul 19 Python
python对象及面向对象技术详解
Jul 19 Python
Django实现组合搜索的方法示例
Jan 23 Python
基于python OpenCV实现动态人脸检测
May 25 Python
python版本单链表实现代码
Sep 28 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
python实现网站微信登录的示例代码
Sep 18 Python
django框架auth模块用法实例详解
Dec 10 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 Python
Python接口测试结果集实现封装比较
May 01 Python
Python实战之实现简易的学生选课系统
May 25 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
php 错误处理经验分享
2011/10/11 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
深入分析php之面向对象
2013/05/15 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
初步解析Python中的yield函数的用法
2015/04/03 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python使用turtle库绘制树
2018/06/25 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
企业统计员岗位职责
2013/12/13 职场文书
社团成立邀请函
2014/01/08 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
检讨书范文大全
2015/05/07 职场文书
好人好事新闻稿
2015/07/17 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript