python装饰器
from functools import wraps
def 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
@single
class B:
pass
b=B()
b.a="hello bachelor"
a=B()
d=single(B)
print(c.a)
通过装饰器实现的单例模式,但是有一个地方不是特别理解:
代码中通过object=B()这种方式创建两个B的实例,为什么
sets={}
print(sets)
这段只被执行了一次。
另一个不解的地方是
@decorator
class B:
pass
不是等价于
decorator(B)的吗
但是在代码中如果用 d=single(B)这种写法, sets={} 这一段却会被执行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简单来说:
PS:你可以首部使用下方代码看下具体执行过程(输入s单步执行)