龙空技术网

python中的__init__ 、__new__、__call__小结

Python骇客 794

前言:

此刻兄弟们对“python中_init_”大约比较珍视,你们都想要学习一些“python中_init_”的相关知识。那么小编在网络上收集了一些关于“python中_init_””的相关资讯,希望兄弟们能喜欢,各位老铁们快快来学习一下吧!

1.__new__(cls, *args, **kwargs) 创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身

2.__init__(self, *args, **kwargs) 创建完对象后调用,对当前对象的实例的一些初始化,无返回值,即在调用__new__之后,根据返回的实例初始化;注意,这里的第一个参数是self即对象本身【注意和new的区别】

3.__call__(self, *args, **kwargs) 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符

看具体的例子:

打印出来的是:

newinit________call

比如:Python Singleton(单例模式)实现,那我们是不是只是重载一些__new__方法就可以了

可不可以重载__init__方法呢?明显不可以,因为__init__之前调用了__new__方法,这时候已经生成了一个对象了,没办法实现单例模式

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

标签: #python中_init_ #python中init和new的区别