【发布时间】:2023-03-18 02:29:01
【问题描述】:
我在这个 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' -
为什么需要单例?只需将对象传递到需要它的地方。 Explicit is better than implicit.
-
您需要为
my_singleton.instance设置一个初始值。除此之外,您只是手动缓存一个值。没有错。 -
谢谢我错过了最后一行。修改了代码。
标签: python optimization design-patterns singleton