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

单例模式 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--c++)

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

    Python高级特性_单例模式实现技巧_1741398532.zip

    Python高级特性、单例模式实现技巧、python教程、学习资源 Python高级特性是指Python编程语言中一些较为复杂和高级的语法特性,这些特性能够让程序员以更加高效和优雅的方式来编写代码。在Python的众多高级特性中,...

    python 设计模式之单例模式

    python 设计模式之单例模式

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

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

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

    Python 作为一种动态类型的脚本语言,实现单例模式有多种方式,例如使用模块级别的变量、基类元类、装饰器等。在本次分享的压缩包文件中,代码采用的是类变量的方式来实现单例模式。这种实现方式的主要思路是将类的...

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

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

    通过C++实现一个设计模式-单例模式.zip

    单例模式属于创建型模式,它在Java、C++、Python等多种编程语言中都有广泛的应用。单例模式的典型应用场景包括:管理数据库连接、创建一个对象的访问点等。 在C++中实现单例模式通常有多种方法,其中较为常见的有:...

    Python单例模式实例分析

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

    单例模式Demo

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

    设计模式之单例模式

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

    Python单例模式实例详解

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

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

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

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

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

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

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

    通过汇编语言生成一个单例模式.zip

    在高级编程语言中,如Java、C#或Python,单例模式的实现相对简单,但要在汇编语言中实现它,则需要更多的底层操作和对内存的直接控制。 在高级语言中实现单例模式,通常是通过类的构造器私有化、创建一个静态实例...

Global site tag (gtag.js) - Google Analytics