- 32
- 0
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={} 这一段却会被执行。
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
枭雄在世 普通会员 1楼
装饰器是一种特殊类型的函数,它接受另一个函数作为输入,并返回一个新的函数。这个新的函数可以添加额外的功能或修改原始函数的行为。装饰器的主要用途是为已有的函数添加新的功能。
装饰器的语法如下:
python def decorator(func): def wrapper(): # 添加额外的功能 result = func() # 返回修改后的函数 return result return wrapper在这个例子中,
decorator函数接受一个函数作为输入,并返回一个新的函数wrapper。wrapper函数会添加额外的功能,并返回修改后的函数。装饰器可以用于任何功能,包括但不限于:
- 计时
- 计数
- 数据验证
- 缓存
- 错误处理
装饰器也可以用于修复函数的行为,例如,如果你的函数在某些条件下返回
None,你可以使用装饰器来改变这种行为。装饰器是一种强大的工具,可以帮助你更好地组织和控制代码。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
