Python单例模式实例详解


Posted in Python onMarch 01, 2017

本文实例讲述了Python单例模式。分享给大家供大家参考,具体如下:

单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。

实现某个类只有一个实例的途径:

1,让一个全局变量使得一个对象被访问,但是他不能防止外部实例化多个对象。

2,让类自身保存他的唯一实例,这个类可以保证没有其他实例可以被创建。

多线程时的单例模式:加锁-双重锁定

饿汉式单例类:在类被加载时就将自己实例化(静态初始化)。其优点是躲避了多线程访问的安全性问题,缺点是提前占用系统资源。

懒汉式单例类:在第一次被引用时,才将自己实例化。避免开始时占用系统资源,但是有多线程访问安全性问题。

实例:

#encoding=utf-8
#单例模式
def PrintInfo(info):
#  print unicode(info,'utf-8').decode('gbk')
  print info.decode('utf-8').encode('utf-8')
import threading
#单例类
class Singleton():
  instance=None
  mutex=threading.Lock()
  def _init__(self):
    pass
  @staticmethod
  def GetInstance():
    if(Singleton.instance==None):
      Singleton.mutex.acquire()
      if(Singleton.instance==None):
        PrintInfo('初始化实例')
        Singleton.instance=Singleton()
      else:
        PrintInfo('单例已经实例化')
      Singleton.mutex.release()
    else:
      PrintInfo('单例已经实例化')
    return Singleton.instance
def clientUI():
  Singleton.GetInstance()
  Singleton.GetInstance()
  Singleton.GetInstance()
  return
if __name__=='__main__':
  clientUI();

结果:

初始化实例 单例已经实例化 单例已经实例化

追加解释 @staticmethod 在 Python中提到 classmethod 就要提到 staticmethod,不是因为二者有什么关系,而是为了让用户区分以便更清楚地写代码。在C++中,我们了解直接通过类名访问的函数称为类的静态函数,即static修饰的函数,可见C++中classmethod和staticmethod是一个概念。 那么python中二者有什么区别呢?先来看下二者如何在python代码中声明

class MyClass:
 ...
 @classmethod # classmethod的修饰符
 def class_method(cls, arg1, arg2, ...):
  ...
 @staticmethod # staticmethod的修饰符
 def static_method(arg1, arg2, ...):
  ...

对于classmethod的参数,需要隐式地传递类名,而staticmethod参数中则不需要传递类名,其实这就是二者最大的区别。

二者都可以通过类名或者类实例对象来调用,因为强调的是classmethod和staticmethod,所以在写代码的时候最好使用类名,良好的编程习惯吧。

对于staticmethod就是为了要在类中定义而设置的,一般来说很少这样使用,可以使用模块级(module-level)的函数来替代它。既然要把它定义在类中,想必有作者的考虑。

对于classmethod,可以通过子类来进行重定义。

提到类级别的函数,也顺带提及类级别的变量

class MyClass:
 i = 123 # class-level variable
 def __init__(self):
 self.i = 456 # object-level variable
 ...

为了清晰地区分上面两个i,最好的办法就是考虑到python中的一切都是object,所以i=123属于class object的,i=456属于class instance object

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
跟老齐学Python之玩转字符串(1)
Sep 14 Python
python实现批量改文件名称的方法
May 25 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
Python线程创建和终止实例代码
Jan 20 Python
python pyenv多版本管理工具的使用
Dec 23 Python
Python内置数据类型list各方法的性能测试过程解析
Jan 07 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 Python
python statsmodel的使用
Dec 21 Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
详解Flask开发技巧之异常处理
Jun 15 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 #Python
python 截取 取出一部分的字符串方法
Mar 01 #Python
详解Python中的静态方法与类成员方法
Feb 28 #Python
python基于itchat实现微信群消息同步机器人
Feb 27 #Python
不要用强制方法杀掉python线程
Feb 26 #Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 #Python
python检查URL是否正常访问的小技巧
Feb 25 #Python
You might like
php的memcached客户端memcached
2011/06/14 PHP
10个实用的PHP代码片段
2011/09/02 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
javascript 获取图片颜色
2009/04/05 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
理解javascript异步编程
2016/01/27 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python看某个模块的版本方法
2018/10/16 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
Django logging配置及使用详解
2019/07/23 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
苹果音乐订阅:Apple Music
2018/08/02 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
销售类个人求职信范文
2013/09/25 职场文书
优秀团员个人的自我评价
2013/10/02 职场文书
防汛工作情况汇报
2014/10/28 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
关于Python中进度条的六个实用技巧分享
2022/04/05 Python