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 相关文章推荐
5种Python单例模式的实现方式
Jan 14 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
简述Python2与Python3的不同点
Jan 21 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
python数据挖掘需要学的内容
Jun 23 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
用python制作个音乐下载器
Jan 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
js判断节假日实例代码
2017/12/27 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Python中多线程及程序锁浅析
2015/01/21 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
Python几种常见算法汇总
2020/06/02 Python
深入了解Python 变量作用域
2020/07/24 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
关于旷工的检讨书
2014/02/02 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
计算机专业求职信
2014/06/02 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
2014年加油站工作总结
2014/12/04 职场文书
社区敬老月活动总结
2015/05/07 职场文书
创业计划书之书店
2019/09/10 职场文书