单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界 访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
一、装饰器实现
def sing(cls): instance={} def _sing(*args,**kwargs): if cls not in instance: instance[cls]=cls(*args,**kwargs) return instance[cls] return _sing @sing class myclass(object): a=1 def __init__(self,x,y): self.x=x self.y=y a1=myclass(1,2) a2=myclass() print id(a1),id(a2)
结果:
140576008975184 140576008975184
PS:id方法的返回值就是对象的内存地址
二、魔法方法__new__实现
代码:
class single(object): #创建对象,返回当前对象的实例 def __new__(cls): return cls class test(single): pass one=test() two=test() print id(one),id(two)
结果:
18830960 18830960
运行的时候,其中__new__中参数cls为test,
或者将类的实例绑定在变量上
class single1(object): def __new__(cls): if not hasattr(cls,'ins'): # 获取cls对象,并将ins属性绑定cls对象 orig=super(single1,cls) cls.ins=orig.__new__(cls) return cls.ins class test1(single1): pass on=test1() tw=test1() print id(on),id(tw)
结果:
140541601328976 140541601328976
三、元类实现
class A(type): # def __init__(cls,name,bases,dict): # super(A,cls).__init__(name,bases,dict) # cls._instance=None #当把一个实例当作方法来调用的时候当把一个实例当作方法来调用的时候,调用__call__ #a=A(),a()写法会调用__call__ def __call__(cls): return cls class B(object): __metaclass__=A one=B() two=B() print id(one),id(two)
结果:
32129184 32129184
相关推荐
主要介绍了python实现线程安全的单例模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在Python中实现单例模式.docx
demo python使用装饰器(Decorator)的方式实现单例模式 functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 __module__、__name__、__doc__,或者通过参数选择
使用python写的使用但里模式创建的一个日志记录器,具体相关知识可以参阅我的博客。
设计模式专题之(一)单例模式---设计模式单例模式示例代码(python--c++)
设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)
注:使用的是Python 2.7。 一个简单实现复制代码 代码如下:class Foo(object): __instance = None def __init__(self): pass @classmethod def getinstance(cls): if(cls.__instance == None): cls.__...
本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下: 方法一 复制代码 代码如下:import threading class Singleton(object): __instance = None __lock = threading.Lock()...
设计模式 java 单例模式
本文实例讲述了Python单例模式。分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被访问,但是...
Python 115.设计模式_单例模式实现.mp4
JS实现单例模式的6种方案汇总 今天在复习设计模式中的-创建型模式,发现JS实现单例模式的方案有很多种,稍加总结了一下,列出了如下的6种方式与大家分享 大体上将内容分为了ES5(Function)与ES6(Class)实现两...
本文实例讲述了python单例模式原理与创建方法。分享给大家供大家参考,具体如下: 1. 单例是什么 举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统...
Python中的单例模式的几种实现方式的及优化
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器...
单例模式 Singleton Pattern 问题解决: (1)单例模式简介: Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有...
主要介绍了Python单例模式的相关资料,这里提供了两种实现方法,及注意事项,需要的朋友可以参考下
主要介绍了聊聊python里如何用Borg pattern实现的单例模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧