猿问

使用 lambda 实现单例模式

我试图弄清楚为什么这段代码有效,只产生一个唯一的 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

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


芜湖不芜
浏览 193回答 1
1回答

慕田峪7331174

考虑装饰器语法:def singleton_function (c):    print("singleton_function")    x = c()    return lambda : x@singleton_functionclass A:    pass这基本上是说:A = singleton_function(A)并singleton_function()创建一个实例,A然后返回一个指向该实例的函数。所以我们得到A = lambda: x其中 x 是原始类 A 的实例。调用A()返回x的仍然是singleton_function()最初创建的同一个实例。
随时随地看视频慕课网APP

相关分类

Python
我要回答