Python中单例模式__new__函数执行顺序详解
有两个类 A、B 均为单例,B 继承 A。实例化 B 时发现会先执行 B 的__new__函数,然后再执行 A 的__new__函数,请问各位大佬这是为什么?
class A(object):
_instance = None
def new(cls, *args, **kw):
if not cls._instance:
print ‘create A instance’
cls._instance = super(A, cls).new(cls, *args, **kw)
else:
print ‘instance A exists’
return cls._instance
def init(self):
print ‘A’
class B(A):
_instance = None
def new(cls,*args,**kw):
if not cls._instance:
print ‘create B instance’
cls._instance = super(B, cls).new(cls, *args, **kw)
else:
print ‘instance B exists’
return cls._instance
def init(self):
print ‘B’
b1=B()
输出为:
create B instance
create A instance
B
Python中单例模式__new__函数执行顺序详解
Python3 下没输出 B, 不太懂,也想知道为什么。
执行顺序没问题啊,你认为应该什么顺序呢。Python3 下没输出 B 是因为你的__new__函数创建实例后没有将实例返回,将后面 else 中的 return 减少一个缩进就可以了。
我的是 2.7 环境,会输出 B
困惑的地方有两点:1、为什么会生成 A 的实例? 2、B 是继承于 A,为什么不是先生成 A 的实例然后生成 B 的实例?
对于第二个问题,在 B 继承与 A 的情况下,当然是先创建 B,然后在创建 B 的过程中完成创建 A 的所有步骤再继续完成创建 B


