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实现定时播放mp3
Mar 29 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
Python验证码识别处理实例
Dec 28 Python
django定期执行任务(实例讲解)
Nov 03 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
python三方库之requests的快速上手
Mar 04 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 Python
python 命令行传参方法总结
May 25 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
无线电的诞生过程
2021/03/01 无线电
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
php依赖注入知识点详解
2019/09/23 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python插入排序算法的实现代码
2013/11/21 Python
Python实现提取文章摘要的方法
2015/04/21 Python
python实现批量监控网站
2016/09/09 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
新教师工作感言
2014/02/16 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
公司承诺书范文
2014/05/19 职场文书
党代会心得体会
2014/09/04 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
奖学金申请书(范文)
2019/08/14 职场文书