开发者社区> 问答> 正文

面向对象中__new__和__init__的区别是什么?

面向对象中__new__和__init__的区别是什么?

展开
收起
真的很搞笑 2021-11-01 22:57:33 364 0
1 条回答
写回答
取消 提交回答
  • (1)__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别。 (2) __new__返回生成的实例,可以返回父类(通过super(当前类名, cls)的方式)__new__出来的实例, 或者直接是对象的__new__出来的实例。这在自己编程实现__new__时要特别注意。 (3) __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一 些其它初始化的动作,init__不需要返回值。 (4) 如果__new__创建的是当前类的实例,会自动调用__init,通过返回语句里面调用的__new__函 数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,那么实际创建并返回的就是其他类的实例,也就不会调用当前类或其他类的__init__函数。

    2021-11-01 22:58:10
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
编程语言如何演化—— 以 JS 的 private 为例 立即下载
编程语言如何演化-以JS的private为例 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多