- 浏览: 577995 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (206)
- Flask (1)
- JavaScript (3)
- Core Java (41)
- XML (1)
- Oracle (11)
- 软件安装及环境配置 (0)
- 其它 (9)
- 面试/笔试 (5)
- 项目 (0)
- JDBC (11)
- Servlet (4)
- MySql (4)
- JNDI (0)
- Hibernate (11)
- Java模式和构架设计 (0)
- Web设计 (22)
- JSP (8)
- Struts (13)
- Tomcat (2)
- Marven (2)
- SVN (2)
- Swing/AWT (1)
- jQuery (2)
- ExtJS (8)
- Python (22)
- Flex (1)
- Django (7)
- 算法 (5)
- English (1)
- Twisted (1)
- Linux (3)
- Rails (1)
- SVG (3)
- PostgreSQL (1)
方法一
import threading class Singleton(object): __instance = None __lock = threading.Lock() # used to synchronize code def __init__(self): "disable the __init__ method" @staticmethod def getInstance(): if not Singleton.__instance: Singleton.__lock.acquire() if not Singleton.__instance: Singleton.__instance = object.__new__(Singleton) object.__init__(Singleton.__instance) Singleton.__lock.release() return Singleton.__instance
1.禁用__init__方法,不能直接创建对象。
2.__instance,单例对象私有化。
3.@staticmethod,静态方法,通过类名直接调用。
4.__lock,代码锁。
5.继承object类,通过调用object的__new__方法创建单例对象,然后调用object的__init__方法完整初始化。
6.双重检查加锁,既可实现线程安全,又使性能不受很大影响。
方法二:使用decorator
#encoding=utf-8 def singleton(cls): instances = {} def getInstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getInstance @singleton class SingletonClass: pass if __name__ == '__main__': s = SingletonClass() s2 = SingletonClass() print s print s2
也应该加上线程安全
附:性能没有方法一高
import threading class Sing(object): def __init__(): "disable the __init__ method" __inst = None # make it so-called private __lock = threading.Lock() # used to synchronize code @staticmethod def getInst(): Sing.__lock.acquire() if not Sing.__inst: Sing.__inst = object.__new__(Sing) object.__init__(Sing.__inst) Sing.__lock.release() return Sing.__inst
发表评论
-
sqlalchemy note
2012-09-10 22:47 13771 # 父表插入记录出错,NotSupportedEr ... -
python note
2012-09-07 11:49 14281.func(**{'type':'Event'}) 等价于f ... -
note
2012-09-03 20:10 1654安装easy_install 安装pip easy_i ... -
with 和 if-else条件表达式
2012-07-22 11:09 1625对于要确保即使发生一个错误时也能运行一些清理代码而言,try. ... -
Python 线程
2012-02-21 12:01 13871.创建线程 通过继承threading模块中的Thread ... -
Python面向对象笔记
2012-02-20 17:18 13781.特殊的类属性 对任何类,都有下面特殊属性: ... -
socket模块
2012-02-20 12:09 14081.socket(family, type) 创建套接字对象 ... -
Python datetime模块
2012-02-18 12:33 9281datetime模块的所有类的对象都是不可变的。 da ... -
Python time模块
2012-02-17 18:20 1069底层C语言库决定了time模块可以处理的日期范围。 c ... -
发送邮件
2012-01-14 19:59 12081.使用smtplib #encoding=utf-8 ... -
Python文件操作
2012-01-14 16:26 1081一.os模块常用操作函数 remove()/unlin ... -
Python异常
2012-01-13 19:11 24731.常用异常名 AttributeError 调用不 ... -
列表和元组
2012-01-12 13:57 15601.列表常用操作 list.append(x) 追加 ... -
字符串
2012-01-12 13:19 14561.字符串常用操作: ... -
Python基础笔记
2012-01-14 16:31 11661.环境变量设置: 编辑系统变量Path,添加两 ... -
版本控制Mercurial(hg)
2011-11-12 16:07 3138简介 ... -
Python Excel Tutorial (一):xlrd的安装和读取Excel文件
2011-09-16 22:49 52072Python Excel Tutorial 指南 安装 有 ... -
Python排序
2011-09-10 13:32 161731.字符串列表排序 列表的排序是python内置功能,自身含 ... -
ChartDirector在Pythonr下的安装
2011-08-27 17:38 17791、在C:/python27/Lib/site_pack ... -
我的第一个Python Web应用
2011-07-05 16:02 3948本文实现的是通信录的Web应用,在Windows xp环 ...
相关推荐
下面是一个简单的Python单例模式日志记录器的实现: ```python class SingletonLogger(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super...
本文实例讲述了Python单例模式。分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被访问,但是...
本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下: 方法一 复制代码 代码如下:import threading class Singleton(object): __instance = None __lock = threading.Lock()...
本文实例讲述了python单例模式原理与创建方法。分享给大家供大家参考,具体如下: 1. 单例是什么 举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统...
单例模式在 Python 中的应用场景通常包括管理全局状态、配置信息、数据库连接等。需要注意的是,虽然单例模式在某些情况下非常有用,但过度使用可能会导致设计复杂性增加,使得代码难以理解和测试。在使用单例时应...
### Python单例模式的多种实现方法 #### 概述 单例模式是一种常见的设计模式,其核心在于确保一个类仅有一个实例,并且该实例能够全局访问。这种模式在某些场景下非常有用,例如管理共享资源、配置管理或日志记录等...
**Python 单例模式详解** 单例模式是一种设计模式,它的目的是确保一个类在整个系统中只能有一个实例。这种模式在需要频繁创建和销毁对象,并且需要保持对象状态一致的场景中非常有用,例如资源管理器、配置管理器...
本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下 多次实例化的结果指向同一个实例 单例模式实现方式 方式一: import settings class MySQL: __instance = None def __init__(self, ip, ...
接下来,我们将详细介绍两种实现Python单例模式的方法。 **方法一:双重检查加锁** 这种方法的关键在于“双重检查”和“线程安全”。首先,我们定义一个类`Singleton`,并初始化一个类级别的变量`__instance`来...
### 五种Python单例模式实现详解 #### 引言 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。本文将详细介绍五种不同的Python单例模式实现方法,每种方法都有其特点与适用场景...
### Python单例模式详解 #### 一、引言 单例模式是一种常用的软件设计模式,在很多编程语言中都有广泛的应用。在Python中实现单例模式不仅有助于提高代码的可读性和可维护性,还能有效控制资源的使用。本文将详细...
### 详解Python单例模式与Metaclass #### 单例模式概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在某些情况下非常有用,比如当应用程序需要控制资源访问时...
在“python单例模式.txt”文件中,可能详细阐述了如何在Python GUI编程中应用单例模式,包括如何创建单例,以及在图形图像处理中如何利用单例模式优化代码结构和性能。例如,可能涉及了如何使用`tkinter`或`PyQt`等...
以下是一个基本的Python单例模式实现: ```python class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__...
### 在Python中实现单例模式 #### 概述 单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在很多情况下,我们希望在整个应用程序中只存在一个特定类型的对象实例,例如配置管理...
需要注意的是,Python的单例模式与Java或C#等语言中的单例有所不同,因为Python的全局解释器锁(GIL)使得多线程环境下依然可以保证单例的线程安全性。然而,如果在多进程环境中,每个进程都有自己的内存空间,那么...