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 中文乱码问题深入分析
Mar 13 Python
python3简单实现微信爬虫
Apr 09 Python
Python3写入文件常用方法实例分析
May 22 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
python判断输入日期为第几天的实例
Nov 13 Python
对python 命令的-u参数详解
Dec 03 Python
python实现移位加密和解密
Mar 22 Python
Python包资源下载路径报404解决方案
Nov 05 Python
PyTorch中的拷贝与就地操作详解
Dec 09 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
Python数据分析之pandas函数详解
Apr 21 Python
常用的Python代码调试工具总结
Jun 23 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
35个Python编程小技巧
2014/04/01 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python如何实现int函数的方法示例
2018/02/19 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
雏鹰争章活动总结
2014/05/09 职场文书
大学生心理活动总结
2014/07/04 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python