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编写分析Python程序性能的工具的教程
Apr 01 Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
浅谈Python 的枚举 Enum
Jun 12 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
python 不以科学计数法输出的方法
Jul 16 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
pandas计数 value_counts()的使用
Jun 24 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
PyTorch中的Variable变量详解
Jan 07 Python
Python自动创建Excel并获取内容
Sep 16 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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python小进度条显示代码
2019/03/05 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
大学生毕业自我鉴定
2013/11/06 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
企业内部培训方案
2014/02/04 职场文书
英文商务邀请函范文
2015/01/31 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书