我试图弄清楚为什么这段代码有效,只产生一个唯一的 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()最初创建的同一个实例。
添加回答
举报
0/150
提交
取消