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函数返回值实例分析
Jun 08 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
python模仿网页版微信发送消息功能
Feb 24 Python
Python理解递归的方法总结
Jan 28 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
python分割一个文本为多个文本的方法
Jul 22 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
解决pip install psycopg2出错问题
Jul 09 Python
Selenium 配置启动项参数的方法
Dec 04 Python
python 基于Apscheduler实现定时任务
Dec 15 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP实现微信发红包程序
2015/08/24 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
Python格式化css文件的方法
2015/03/10 Python
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
中国旅游网站:同程旅游
2016/09/11 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
好的演讲稿开场白
2013/12/30 职场文书
酒店营销策划方案
2014/02/07 职场文书
动员大会主持词
2014/03/20 职场文书
诚信承诺书范文
2014/03/27 职场文书
医院志愿者活动总结
2015/05/06 职场文书
课文《燕子》教学反思
2016/02/17 职场文书