Python 实现单例
文章目录
起步
单例模式是一种常用的软件设计模式,用来确保一个类只会有一个实例存在。
以下是 Python 中实现单例模式的多种方法,环境基于 Python3.6.6。
__new__函数
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
# 示例:
a = Singleton()
b = Singleton()
# id(a) == id(b)
每次实例化一个对象时,都会先调用 __new__()
创建一个对象,再调用 __init__()
函数初始化数据。因而,在 new 函数中判断 Singleton类 是否已经实例化过,如果不是,调用父类的 new 函数创建实例;否则返回之前创建的实例。
_instance 作为类属性,保证了所有对象的 _instance 都是同一个。
元类 metaclass
class SingletonMetaClass(type):
_instance = None
def __call__(self, *args, **kwargs):
if self._instance is None:
self._instance = super().__call__(*args, **kwargs)
return self._instance
class Singleton(metaclass=SingletonMetaClass):
pass