gpt4 book ai didi

python - 使用函数的单例实现

转载 作者:行者123 更新时间:2023-11-28 17:05:56 24 4
gpt4 key购买 nike

我在这个 SO question 中了解了创建单例函数的多种方法.

我想到了另一种方法

def my_singleton():

if not my_singleton.instance:
class MyClass:
pass

my_singleton.instance = MyClass()

return my_singleton.instance

my_singleton.instance = None

与前面 SO 问题中提到的其他方法相比,这种方法有什么问题?是否有任何与实例的内存/GC/线程安全/生命周期相关的含义。我问这个是因为其他方法对于初学者来说看起来相当复杂(元类、装饰器、基类、装饰器返回类)

最佳答案

除了实例属性的问题(AttributeError: 'function' object has no attribute 'instance')之外,这种方法还有另一个问题。使用 my_singleton 创建“几乎单例”对象后,您可以简单地从该对象获取类并创建该类的对象。

x = my_singleton()
y = my_singleton()
x == y
Out[50]: True

z = x.__class__()
type(z) == type(x)
Out[52]: True

z == x
Out[53]: False

顺便说一句。以下是我如何修复您的 my_singleton() 函数(不引发属性错误,但它仍然不是真正的单例):

def my_singleton():
try:
return my_singleton.instance
except AttributeError:
class MyClass:
pass
my_singleton.instance = MyClass()
return my_singleton.instance

关于python - 使用函数的单例实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51040899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com