from functools import wrapsdef single(cls): sets={} print(sets) @wraps(cls) def wrapper(*args,**kw): if 'ex' not in sets: sets['ex']=cls(*args,**kw) return sets['ex'] return wrapper@singleclass B: passb=B() b.a="hello bachelor"a=B() d=single(B) print(c.a)
通过装饰器实现的单例模式,但是有一个地方不是特别理解:
代码中通过object=B()这种方式创建两个B的实例,为什么
sets={} print(sets)
这段只被执行了一次。
另一个不解的地方是
@decoratorclass B: pass不是等价于 decorator(B)的吗
但是在代码中如果用 d=single(B)这种写法, sets={} 这一段却会被执行。
繁花如伊
相关分类