单例模式在Python中的实现

单例模式在Python中的实现,python,singleton,Python,Singleton,正如agf出色地回答的那样,Python中单例的可能实现可以使用以下元类: class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) r

正如agf出色地回答的那样,Python中单例的可能实现可以使用以下元类:

class Singleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]

但是,我不理解
\u instance
的用法。我知道这是一个dict,用于存储按类索引的实例。但是,它被声明为类属性(
\u instances={}
),并用作
cls
(如果cls不在cls中,
。\u instances:
)。这两者怎么可能是一样的呢?

难道不应该用
@classmethod
来修饰
def\uuuu call\uuuu(…)
吗?好吧,如果你用
@classmethod
来修饰
\uu call\uuuuuu
的话,一个
cls
属性就是一个类属性,正如参数名所建议的那样。