python 单例装饰器

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]。

 

posted @ 2019-10-08 10:20  韩文林  阅读(677)  评论(0编辑  收藏  举报