为了账号安全,请及时绑定邮箱和手机立即绑定

使用 lambda 实现单例模式

使用 lambda 实现单例模式

芜湖不芜 2021-09-11 16:03:48
我试图弄清楚为什么这段代码有效,只产生一个唯一的 A 类实例。def singleton_function (c):    print("singleton_function")    x = c()    return lambda : x@singleton_functionclass A:    passdef test2 () :    x = A()    y = A()    assert x == ytest2()输出:python3 test.pysingleton_function为什么 singleton_function 只访问一次?A 是函数类型,所以我的猜测是当调用 A, A() 时,它返回 x,它是类 A 的实例,因此,它应该打印两次“singleton_function”,因为我访问了两次。我在想什么?
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

考虑装饰器语法:


def singleton_function (c):

    print("singleton_function")

    x = c()

    return lambda : x



@singleton_function

class A:

    pass

这基本上是说:


A = singleton_function(A)

并singleton_function()创建一个实例,A然后返回一个指向该实例的函数。


所以我们得到


A = lambda: x

其中 x 是原始类 A 的实例。调用A()返回x的仍然是singleton_function()最初创建的同一个实例。


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信