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 模拟员工信息数据库操作的实例
Oct 23 Python
基于Python Numpy的数组array和矩阵matrix详解
Apr 04 Python
python监控进程脚本
Apr 12 Python
神经网络(BP)算法Python实现及应用
Apr 16 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
Django 开发环境与生产环境的区分详解
Jul 26 Python
Python列表元素常见操作简单示例
Oct 25 Python
详解Python高阶函数
Aug 15 Python
python3 删除所有自定义变量的操作
Apr 08 Python
python单向链表实例详解
May 25 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
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python实现年会抽奖程序
2019/01/22 Python
django连接oracle时setting 配置方法
2019/08/29 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
校园之星获奖感言
2014/01/29 职场文书
便利店投资创业计划书
2014/02/08 职场文书
建议书怎么写
2014/03/12 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
法人代表证明书格式
2014/10/01 职场文书
考研导师推荐信范文
2015/03/27 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏