`
rockkyle
  • 浏览: 10768 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

单例模式 python

 
阅读更多

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界 访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

一、装饰器实现

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实现线程安全的单例模式通常需要结合装饰器和线程锁来确保在多线程环境下只有一个实例存在。这里的实现方式是定义了两个装饰器,`Singleton`用于创建单例,`synchronized`用于实现线程同步。通过...

    在Python中实现单例模式.docx

    ### 在Python中实现单例模式 #### 概述 单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在很多情况下,我们希望在整个应用程序中只存在一个特定类型的对象实例,例如配置管理...

    使用python写的单例模式日志记录器(设计模式之单例模式)

    在这个场景中,我们讨论的是一个使用Python实现的单例模式日志记录器。日志记录器是程序中用于记录运行时信息的重要工具,它帮助开发者追踪错误、调试代码以及理解程序的执行流程。 首先,我们要理解单例模式的基本...

    python使用装饰器(Decorator)的方式实现单例模式

    demo python使用装饰器(Decorator)的方式实现单例模式 functools.wraps 则可以将原函数对象的指定属性复制给包装函数对象, 默认有 __module__、__name__、__doc__,或者通过参数选择

    设计模式单例模式示例代码(python--c++)

    在Python中,实现单例模式稍微简单一些,因为Python的全局作用域保证了类只会被初始化一次。以下是一个Python版本的单例模式示例: ```python class Singleton(object): _instance = None def __new__(cls, *...

    python 设计模式之单例模式

    python 设计模式之单例模式

    设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)

    在Python中,实现单例模式相对简单,因为Python的全局作用域特性使得类实例化后可以全局共享。以下是一个基本的Python单例模式实现: ```python class Singleton(object): _instance = None def __new__(cls, *...

    Python使用redis pool的一种单例实现方式

    本篇文章将详细介绍如何在Python中利用`redis`库实现一个基于单例模式的Redis连接池。 首先,我们需要导入`redis`库,它提供了Python与Redis服务器通信的接口。在下面的代码中,我们定义了一个类`RedisDBConfig`,...

    Python单例模式实例分析

    本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下: 方法一 复制代码 代码如下:import threading    class Singleton(object):   __instance = None     __lock = threading.Lock()...

    单例模式Demo

    在Java、C#、Python等面向对象编程语言中,都可以实现单例模式。 单例模式的核心在于控制类的实例化过程,通常通过以下步骤实现: 1. 封锁构造函数:私有化构造函数,防止外部直接创建实例。 2. 创建单例:在类...

    设计模式之单例模式

    单例模式是软件设计模式中的一种基础模式,它在Java编程中被广泛应用。单例模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式可以有效地控制资源的使用,限制实例的数量,提高性能,尤其是在...

    通过python实现单例模式(类变量).rar

    压缩包文件代码是一个常见的设计模式——单例模式(Singleton Pattern) 的 Python 实现。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这在需要控制资源访问或需要协调系统范围内的操作时...

    Python单例模式实例详解

    Python中的单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式常用于管理共享资源,如数据库连接、配置对象等,以避免资源的重复创建和销毁,提高效率。 单例模式的...

    Singleton 单例模式的介绍以及解析

    单例模式是软件设计模式中的一种经典模式,它在Java、C++、Python等众多编程语言中被广泛应用。单例模式的主要目的是确保一个类只有一个实例,并提供全局访问点,这样可以有效地控制资源的共享,避免因为多次实例化...

    Python 115.设计模式_单例模式实现.mp4

    Python 115.设计模式_单例模式实现.mp4

    【JavaScript源代码】JS实现单例模式的6种方案汇总.docx

    JavaScript中的单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一实例。这种模式在JavaScript开发中非常有用,尤其是在处理全局变量、避免命名冲突、节省内存以及统一接口等...

    单例模式应用DEMO SHOW

    在Java、C#、Python等面向对象的语言中,都可以实现单例模式。下面将详细介绍单例模式的实现方式以及其优缺点。 ### 单例模式的实现方式: 1. **饿汉式(静态常量)**: 在类加载时就完成了初始化,所以没有安全...

    Python单例模式的四种创建方式实例解析

    单例模式在 Python 中的应用场景通常包括管理全局状态、配置信息、数据库连接等。需要注意的是,虽然单例模式在某些情况下非常有用,但过度使用可能会导致设计复杂性增加,使得代码难以理解和测试。在使用单例时应...

Global site tag (gtag.js) - Google Analytics