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 with statement 进行文件操作指南
Aug 22 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
python爬取微信公众号文章
Aug 31 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
Python初学者常见错误详解
Jul 02 Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 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实现截取指定长度
2013/08/06 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
js实现图片实时时钟
2020/01/15 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
Python类属性的延迟计算
2016/10/22 Python
20个常用Python运维库和模块
2018/02/12 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
Python 多进程原理及实现
2020/12/21 Python
python模块内置属性概念及实例
2021/02/18 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
Java程序员面试90题
2013/10/19 面试题
大学毕业感言100字
2014/02/03 职场文书
党支部综合考察材料
2014/05/19 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
预备党员考察意见范文
2015/06/01 职场文书
民主生活会意见
2015/06/05 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js