Python使用metaclass实现Singleton模式的方法


Posted in Python onMay 05, 2015

本文实例讲述了Python使用metaclass实现Singleton模式的方法。分享给大家供大家参考。具体实现方法如下:

class Singleton(type):
  def __call__(cls, *args, **kwargs):
    print "Singleton call"
    if not hasattr(cls, 'instance'):
      cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
    return cls.instance
  def __new__(cls, name, bases, dct):
    print "Singleton new"
    return type.__new__(cls, name, bases, dct)
  def __init__(cls, name, bases, dct):
    print "Singleton init"
    super(Singleton, cls).__init__(name, bases, dct)
class Cache(object):
  __metaclass__ = Singleton
  def __new__(cls, *args, **kwargs):
    print "Cache new"
    return object.__new__(cls, *args, **kwargs)
  def __init__(cls, *args, **kwargs):
    print "Cache init"
  def __call__(cls, *args, **kwargs):
    print "Cache call"
print Cache()
print Cache()

输出:

Singleton new
Singleton init
Singleton call
Cache new
Cache init
<__main__.Cache object at 0x01CDB130>
Singleton call
<__main__.Cache object at 0x01CDB130>

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

Python 相关文章推荐
python调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
Python批量查询域名是否被注册过
Jun 21 Python
Python 处理数据的实例详解
Aug 10 Python
深入理解Django自定义信号(signals)
Oct 15 Python
python-opencv颜色提取分割方法
Dec 08 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
Python Excel处理库openpyxl使用详解
May 09 Python
django 扩展user用户字段inlines方式
Mar 30 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 Python
python中查看变量内存地址的方法
May 05 #Python
Python中统计函数运行耗时的方法
May 05 #Python
Python调用命令行进度条的方法
May 05 #Python
Python记录详细调用堆栈日志的方法
May 05 #Python
进一步探究Python的装饰器的运用
May 05 #Python
Python获取任意xml节点值的方法
May 05 #Python
Python实现方便使用的级联进度信息实例
May 05 #Python
You might like
我的论坛源代码(四)
2006/10/09 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php json相关函数用法示例
2017/03/28 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
Python中的默认参数详解
2015/06/24 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
采购主管岗位职责
2014/02/01 职场文书
《泉水》教学反思
2014/04/11 职场文书
师德师风自我评价范文
2014/09/11 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
导游词之阆中古城
2019/12/23 职场文书
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android