Python __call__ 和 __init__ 区别
2012-12-28 09:34
169 查看
## 记录下来python学习的道路。
这几天终于有时间可以拿过nova的源码来学习,也正好旁边有python比较精通的高人,自然多学,多问,多总结,坚持住,搞定nova。
在看nova源码的过程中,在nova中,除了import了很多第三方的mod,本地的mod,import感觉也比较随意,尤其是在import的时候,会默认执行mod中的__init__.py和py中的全局变量,全局的逻辑代码,这个让人比较纠结,说明再简单的mod都不能放过的。
看nova源码之前,还要补些基础知识,经常遇到很多callable类,表征就是在py类中定义了__call__方法,于是产生了__call__和__init__的区别是? __call__的作用又是什么呢?开问高手,答案是比较模糊,于是乎google了下。
简单说来,__call__相当于把()做了标识符重载,在使用类初始化对象的时候,调用类中的__init__方法,而程序中使用对象()的时候,调用类中的__call__方法,使得对象本身成为了函数。感觉python还是很神奇的说。
而且在python中,出现函数中定义函数,类中定义类,感觉没得章法,随性而为。于是高手解答,可以实现对类内部方法的隐藏,而方法的调用,使用的是内部的函数指针,类的函数是透明的。
python能量无穷啊,但这看起源码来,得一层层的解封装,费煞脑筋。。
参考资料:http://www.cnblogs.com/lovemo1314/archive/2011/04/29/2032871.html
这几天终于有时间可以拿过nova的源码来学习,也正好旁边有python比较精通的高人,自然多学,多问,多总结,坚持住,搞定nova。
在看nova源码的过程中,在nova中,除了import了很多第三方的mod,本地的mod,import感觉也比较随意,尤其是在import的时候,会默认执行mod中的__init__.py和py中的全局变量,全局的逻辑代码,这个让人比较纠结,说明再简单的mod都不能放过的。
看nova源码之前,还要补些基础知识,经常遇到很多callable类,表征就是在py类中定义了__call__方法,于是产生了__call__和__init__的区别是? __call__的作用又是什么呢?开问高手,答案是比较模糊,于是乎google了下。
简单说来,__call__相当于把()做了标识符重载,在使用类初始化对象的时候,调用类中的__init__方法,而程序中使用对象()的时候,调用类中的__call__方法,使得对象本身成为了函数。感觉python还是很神奇的说。
而且在python中,出现函数中定义函数,类中定义类,感觉没得章法,随性而为。于是高手解答,可以实现对类内部方法的隐藏,而方法的调用,使用的是内部的函数指针,类的函数是透明的。
python能量无穷啊,但这看起源码来,得一层层的解封装,费煞脑筋。。
参考资料:http://www.cnblogs.com/lovemo1314/archive/2011/04/29/2032871.html
相关文章推荐
- python中__init__()方法和__new__()方法的区别
- Python中super()和__init__()有什么区别?
- python中的__init__ 、__new__、__call__小结
- python __new__ __init__ __call__详解
- python类中super()和__init__()的区别
- module_init 和 late_initcall 区别
- 【python】__new__和__init__的区别
- python __init__和__new__之间的区别
- python 中 __init__和__new__的区别
- python中__init__()、__new__()、__call__()、__del__()几个魔法方法的用法
- 飘逸的python - __new__、__init__、__call__傻傻分不清
- 深入理解Python中的 __new__ 和 __init__及区别介绍
- 详解Python中的__new__、__init__、__call__三个特殊方法(zz)
- 详解Python中的__new__、__init__、__call__三个特殊方法
- python:how does subclass call baseclass's __init__()
- Python中的__init__方法与__new__方法的区别
- Python __new__, __init__, __metaclass__, __call__, __del__, __getattr__, __getattribute__
- Python中__new__与__init__方法的区别详解
- python内置函数__init__及__str__的区别
- Python中的__init__,__call__