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工厂函数用法实例分析
May 14 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
解决Django中多条件查询的问题
Jul 18 Python
django最快程序开发流程详解
Jul 19 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
python Xpath语法的使用
Nov 26 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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中MVC的开发经验分享
2012/05/17 PHP
PHP 文件系统详解
2012/09/13 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
javascript实现简易计算器
2017/02/01 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
简历中求职的个人自我评价
2013/12/03 职场文书
展会邀请函范文
2014/01/26 职场文书
交通事故私了协议书
2014/04/16 职场文书
取保候审保证书
2014/04/30 职场文书
优秀家长事迹材料
2014/05/17 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
Python Socket编程详解
2021/04/25 Python