You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中定义空__new__方法为何阻止__init__执行且实现单例?

问题解答

一、为什么__init__方法未被调用?

在Python中,__new__是负责创建类实例的特殊方法,它的返回值直接决定后续是否触发__init__:

  • 只有当__new__返回当前类(或其子类)的实例对象时,Python才会自动调用该实例的__init__方法完成初始化。
  • 你定义的空__new__方法只有pass,默认返回None,并没有生成NaiveSingleton类的实例。没有实例对象,自然不会触发__init__,所以看不到打印输出。

二、为什么空__new__能产生“单例”效果?

执行实例化代码后,nsA1和nsA2的实际值都是None——因为每次调用NaiveSingleton()时,__new__都返回None。而None在Python中是全局唯一的单例对象,所以nsA1 is nsA2的结果为True,看起来像是类实现了单例。

但这是一种错误且无意义的“伪单例”:实际上根本没有创建出NaiveSingleton类的任何实例,只是返回了Python内置的None对象而已。

注:你提供的执行代码里类名存在笔误,应该是NaiveSingleton()而非NaiveSingletonA()。

内容的提问来源于stack exchange,提问作者BaruchLi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:04:53