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通过ftplib登录到ftp服务器的方法
May 08 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
解决python3 安装不了PIL的问题
Aug 16 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
python实现简单俄罗斯方块
Mar 13 Python
使用K.function()调试keras操作
Jun 17 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
python的数学算法函数及公式用法
Nov 18 Python
Python中os模块的简单使用及重命名操作
Apr 17 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
python+opencv实现目标跟踪过程
Jun 21 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
微信公众平台天气预报功能开发
2014/07/06 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP中常用的魔术方法
2017/04/28 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
Python创建xml的方法
2015/03/10 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python获取交互式ssh shell的方法
2019/02/14 Python
详解Python打包分发工具setuptools
2019/08/05 Python
如何基于python实现不邻接植花
2020/05/01 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
详解python变量与数据类型
2020/08/25 Python
幼儿园父亲节活动方案
2014/03/11 职场文书
挂牌仪式主持词
2014/03/20 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
毕业生工作求职信
2014/06/30 职场文书
小学亲子活动总结
2014/07/01 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python