Python __call__ 和 __init__ 区别

本文通过解析OpenStack项目Nova的源码,探讨Python中模块导入机制的特点及潜在问题,并深入讨论__call__和__init__的区别,揭示Python语言灵活多变的一面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


## 记录下来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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值