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 元类使用说明
Dec 18 Python
Python编程中的异常处理教程
Aug 21 Python
详解python开发环境搭建
Dec 16 Python
python中关于for循环的碎碎念
Jun 30 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
Jun 19 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
通过字符串导入 Python 模块的方法详解
Oct 27 Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 Python
python实现126邮箱发送邮件
May 20 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
python 发送邮件的四种方法汇总
Dec 02 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 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
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
php生成word并下载代码实例
2019/03/15 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
js AspxButton的客户端操作
2009/06/26 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
超简单使用Python换脸实例
2019/03/27 Python
如何使用python操作vmware
2019/07/27 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
高中数学教师求职信
2013/10/30 职场文书
一月红领巾广播稿
2014/02/11 职场文书
陈欧广告词
2014/03/14 职场文书
索赔员岗位职责
2015/02/15 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
二年级作文之动物作文
2019/11/13 职场文书
mysql部分操作
2021/04/05 MySQL