Python中单例模式的实现方法有多种,但在这些方法中属装饰器版本用的广,因为装饰器是基于面向切面编程思想来实现的,具有很高的解耦性和灵活性。
单例模式定义:具有该模式的类只能生成一个实例对象。
def singlecls(cls, *args,**kwargs):
instace = {}
def get_instance(cls, *args, **kwargs):
if cls not in instace:
instances[cls] = cls(*args, **kwargs)
return instance[cls]
return get_instace
@singlecls
class A(object):
def __init__(self):
pass
A = singlecls(A)
在创建实例对象时会先将 A 作为参数传入到 singlecls 函数中,函数在执行过程中不会执行 get_instance 函数(函数只有调用才会执行),直接返回get_instance函数名。
此时可以看作 A = get_instance,创建实例时相当于 a= get_instance(),调用get_instance 函数,先判断实例是否在字典中,如果在直接从字典中获取并返回,
如果不在执行 instances [cls] = A(),然后返回该实例对象并赋值非a变量,即a = instances[cls]。