首页 > 解决方案 > 有人可以向我解释这种单例模式是如何工作的吗?

问题描述

我正在使用这种单例模式并且它有效,但我无法弄清楚它在做什么。有人可以向我解释这个程序是如何工作的吗?

谢谢!

class Singleton(object):
  _instances = {}
  def __new__(class_, *args, **kwargs):
    if class_ not in class_._instances:
        class_._instances[class_] = super(Singleton, class_).__new__(class_, *args, **kwargs)
    return class_._instances[class_]

class Context(Singleton):
    #do things

标签: pythonsingleton

解决方案


单例模式是指您只能启动一次的类。如果您尝试创建单例类的第二个对象,它只会返回已经启动的对象

让我们一步一步地分析代码

_instances = {}

这是一个字典,我们保存我们已经创建的对象。这里要理解的重要一点是,这是在对象之间共享的。当你创建一个新对象时,你总是得到相同的字典。

if class_ not in class_._instances:
    class_._instances[class_] = super(Singleton, class_).__new__(class_, *args, **kwargs)

现在正如我之前提到的,单例创建一个对象一次,如果您尝试创建一个新对象,它会再次返回它。这里的代码通过查看字典内部来检查我们是否已经创建了对象。如果我们还没有创建它,它将创建一个新对象并将其保存到 _instances 字典中。如果它已经存在,它将跳过此代码。

return class_._instances[class_]

然后我们返回保证它存在的对象。请记住,我们已经检查过我们没有创建此类的实例,因此我们可以创建一个新实例。如果它已经创建,我们只需从字典中返回它。


推荐阅读