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
相关产品推荐
相关产品推荐

