使用Lambda实现Singleton模式

时间:2018-12-09 03:24:26

标签: python singleton

我试图弄清楚为什么这段代码起作用,只生成类A的唯一实例。

def singleton_function (c):
    print("singleton_function")
    x = c()
    return lambda : x

@singleton_function
class A:
    pass

def test2 () :
    x = A()
    y = A()
    assert x == y

test2()

输出:

python3 test.py
singleton_function

为什么单例函数只能访问一次? A是函数类型,所以我的猜测是,当调用A,A()时,它返回x,这是类A的实例,因此,它应该打印两次“ singleton_function”,因为我要访问两次。 我在想什么错?

1 个答案:

答案 0 :(得分:0)

考虑装饰器语法:

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()最初创建的实例相同。