`
edison0951
  • 浏览: 71722 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python单例模式

阅读更多

网上曾经看到过PYTHON的面试题中有一个是PYTHON的单例模式,说实话,用了这么久的PYTHON,第一次听说单例模式,GOOGLE一下单例模式的关键词,出来的几页面全是JAVA的,想想自己早年也看过一些JAVA的书,先不谈语法,JAVA的很多设计完全就是要把开发者搞晕。UNIX的KISS原则不是很好么,非要把自己搞的很高深,现在的C++的复杂度不就是未来JAVA想要弄的么,一个开发者不学习个半年到1年,JAVA的很多东西根本就无法上手,我们所倡导的敏捷和开发效率,根本就无从谈起了。扯了这么多,还是看看SATCKOVERFLOW上单例模式吧

class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(
                                cls, *args, **kwargs)
        return cls._instance


if __name__ == '__main__':
    s1=Singleton()
    s2=Singleton()
    if(id(s1)==id(s2)):
        print "Same"
    else:
        print "Different"

 这不就是一个类只有一个实例么,还取名叫什么单例模式(就是要把开发人员搞晕),看来还是函数编程来的实在。

分享到:
评论
15 楼 tonyseek 2011-04-18  
sydra 写道
不是很懂python,鄙人是做java的,很奇怪这个单例类,不会有并发性问题么?
如果有多个线程同时访问,有可能会产生多个实例的啊~


不会的,Python 有 GIL 作为全局锁,保证线程安全。除非访问了 IO 或者调用了 sleep ,Python 会释放锁而导致线程不安全,其他情况下都是可靠的。
14 楼 edison0951 2011-02-13  
Kabie 写道
Singleton模式一般是用metaclass实现的……这个做的不够漂亮。。。

还妄赐教,不知道如何写哟
13 楼 许怀远 2011-02-04  
mikewang 写道
sydra 写道
不是很懂python,鄙人是做java的,很奇怪这个单例类,不会有并发性问题么?
如果有多个线程同时访问,有可能会产生多个实例的啊~


不会的, GIL 保证在一个时刻,只有一个线程在运行


没用的
if not AAA:
    BBB

假设两个线程T1和T2,
T1执行完if准备执行BBB的时候,正好被切出,
此时T2进入,执行if判断,仍然是True,于是T2执行BBB,
之后T2挂起,T1被切入,继续执行BBB
12 楼 Kabie 2011-01-25  
Singleton模式一般是用metaclass实现的……这个做的不够漂亮。。。
11 楼 greatghoul 2011-01-25  
感觉像两妇女骂架,还挺带感的。喜欢python的,看了楼主鄙视java的言论,笑一下就可以了,喜欢java的,没有必要逛到这里找气受吧。这种东西,本就没有什么公论,还争吵个不休,都快过年了。。。
10 楼 mikewang 2011-01-24  
sydra 写道
不是很懂python,鄙人是做java的,很奇怪这个单例类,不会有并发性问题么?
如果有多个线程同时访问,有可能会产生多个实例的啊~


不会的, GIL 保证在一个时刻,只有一个线程在运行
9 楼 edison0951 2011-01-22  
gaotianpu 写道
设计模式是给那些强类型、静态语言设计的,像python这样的语言,很多情况下不用设计模式更好些!

here is the offical document:
http://www.python.org/workshops/1997-10/proceedings/savikko.html

我也同意,PYTHON,HASKELL,LISP之流更适合函数编程
8 楼 gaotianpu 2011-01-21  
设计模式是给那些强类型、静态语言设计的,像python这样的语言,很多情况下不用设计模式更好些!

here is the offical document:
http://www.python.org/workshops/1997-10/proceedings/savikko.html
7 楼 sydra 2011-01-21  
不是很懂python,鄙人是做java的,很奇怪这个单例类,不会有并发性问题么?
如果有多个线程同时访问,有可能会产生多个实例的啊~
6 楼 robertpi 2011-01-20  
gof那个当然不是万能的,例如在java中在有容器情况下单例和工厂根本不需要,搜下论坛里面老帖子就知道了。
5 楼 edison0951 2011-01-19  
liuia 写道
对于自己不懂的东西最好表现的虚心一点
设计模式请参照四人帮的书
Design Patterns: Elements of Reusalbe Object-Oriented Software

还有一点就是我很喜欢函数编程,不是太喜欢面向对象那一套吧,JAVA的那些东西实在是不敢苟同。
4 楼 edison0951 2011-01-19  
marlonyao 写道
你的方法很好,但也有一个很大的问题,它会继承完全失效。


我没有考虑到继承的因素呀
3 楼 edison0951 2011-01-19  
liuia 写道
对于自己不懂的东西最好表现的虚心一点
设计模式请参照四人帮的书
Design Patterns: Elements of Reusalbe Object-Oriented Software

那本书我大概扫描了一眼,也看过一些设计模式的书。首先我觉得学习JAVA过后或者有写过JAVA代码的人动不动就给我把设计模式抬出来,这让我很无语。这个不是懂不懂的关系,要按照四人帮那个书,DJANGO的MVC模式还是来自于SMALLTALK,那个书第个设计模式就是这个。
2 楼 marlonyao 2011-01-19  
你的方法很好,但也有一个很大的问题,它会继承完全失效。

1 楼 liuia 2011-01-19  
对于自己不懂的东西最好表现的虚心一点
设计模式请参照四人帮的书
Design Patterns: Elements of Reusalbe Object-Oriented Software

相关推荐

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

    下面是一个简单的Python单例模式日志记录器的实现: ```python class SingletonLogger(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super...

    Python单例模式实例详解

    本文实例讲述了Python单例模式。分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被访问,但是...

    Python单例模式实例分析

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

    python单例模式原理与创建方法实例分析

    本文实例讲述了python单例模式原理与创建方法。分享给大家供大家参考,具体如下: 1. 单例是什么 举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统...

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

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

    python单例模式的多种实现方法

    ### Python单例模式的多种实现方法 #### 概述 单例模式是一种常见的设计模式,其核心在于确保一个类仅有一个实例,并且该实例能够全局访问。这种模式在某些场景下非常有用,例如管理共享资源、配置管理或日志记录等...

    python单例模式实例分析

    **Python 单例模式详解** 单例模式是一种设计模式,它的目的是确保一个类在整个系统中只能有一个实例。这种模式在需要频繁创建和销毁对象,并且需要保持对象状态一致的场景中非常有用,例如资源管理器、配置管理器...

    python单例模式实例解析

    本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下 多次实例化的结果指向同一个实例 单例模式实现方式 方式一: import settings class MySQL: __instance = None def __init__(self, ip, ...

    Python单例模式的两种实现方法

    接下来,我们将详细介绍两种实现Python单例模式的方法。 **方法一:双重检查加锁** 这种方法的关键在于“双重检查”和“线程安全”。首先,我们定义一个类`Singleton`,并初始化一个类级别的变量`__instance`来...

    5种Python单例模式的实现方式

    ### 五种Python单例模式实现详解 #### 引言 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。本文将详细介绍五种不同的Python单例模式实现方法,每种方法都有其特点与适用场景...

    简单了解python单例模式的几种写法

    ### Python单例模式详解 #### 一、引言 单例模式是一种常用的软件设计模式,在很多编程语言中都有广泛的应用。在Python中实现单例模式不仅有助于提高代码的可读性和可维护性,还能有效控制资源的使用。本文将详细...

    详解python单例模式与metaclass

    ### 详解Python单例模式与Metaclass #### 单例模式概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在某些情况下非常有用,比如当应用程序需要控制资源访问时...

    python单例模式.zip_图形图像处理_Python_

    在“python单例模式.txt”文件中,可能详细阐述了如何在Python GUI编程中应用单例模式,包括如何创建单例,以及在图形图像处理中如何利用单例模式优化代码结构和性能。例如,可能涉及了如何使用`tkinter`或`PyQt`等...

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

    以下是一个基本的Python单例模式实现: ```python class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__...

    在Python中实现单例模式.docx

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

    python单例设计模式实现解析

    需要注意的是,Python的单例模式与Java或C#等语言中的单例有所不同,因为Python的全局解释器锁(GIL)使得多线程环境下依然可以保证单例的线程安全性。然而,如果在多进程环境中,每个进程都有自己的内存空间,那么...

Global site tag (gtag.js) - Google Analytics