我试图弄清楚为什么这段代码起作用,只生成类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”,因为我要访问两次。 我在想什么错?
答案 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()
最初创建的实例相同。