python 单例装饰器

纵然是瞬间 提交于 2019-11-30 17:56:54

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!