1、需求场景
当程序中只需要创建一个实例对象时(如封装的日志类,读取的配置文件类,数据库连接池等),避免创建过多对象占用资源,或程序中创建多个对象会导致数据的混乱(如类中读文件写文件操作)
2、实现方法
使用类的new方法,创建类时判断是否已经实例化
import threading
class Singleton(object):
_instance_lock = threading.Lock()
def __init__(self, *args, **kwargs):
pass
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
with Singleton._instance_lock:
if not hasattr(cls, '_instance'):
Singleton._instance = object.__new__(cls)
return Singleton._instance
# 测试
obj1 = Singleton()
obj2 = Singleton()
print(obj1)
print(obj2)
可以看出创建的实例都是同一个实例