使用lambda实现单例模式
Using lambda to implement Singleton pattern
我试图弄清楚为什么这段代码有效,只生成了 class 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是function类型的,所以我猜测是调用A,A()的时候,returnsx,是classA的实例,所以,应该打印了两次"singleton_function",因为我正在访问两次。
我哪里想错了?
考虑装饰器语法:
def singleton_function (c):
print("singleton_function")
x = c()
return lambda : x
@singleton_function
class A:
pass
这实际上是在说:
A = singleton_function(A)
并且 singleton_function()
创建一个 A
的实例,然后 returns 一个指向该实例的函数。
所以我们得到
A = lambda: x
其中 x 是原始 class A. 调用 A()
returns x
仍然是 singleton_function()
首先创建的同一个实例.
我试图弄清楚为什么这段代码有效,只生成了 class 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是function类型的,所以我猜测是调用A,A()的时候,returnsx,是classA的实例,所以,应该打印了两次"singleton_function",因为我正在访问两次。 我哪里想错了?
考虑装饰器语法:
def singleton_function (c):
print("singleton_function")
x = c()
return lambda : x
@singleton_function
class A:
pass
这实际上是在说:
A = singleton_function(A)
并且 singleton_function()
创建一个 A
的实例,然后 returns 一个指向该实例的函数。
所以我们得到
A = lambda: x
其中 x 是原始 class A. 调用 A()
returns x
仍然是 singleton_function()
首先创建的同一个实例.