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项目发布为exe可执行程序过程分享
Oct 23 Python
Python运算符重载用法实例
May 28 Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
python3 读写文件换行符的方法
Apr 09 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
Python实现决策树C4.5算法的示例
May 30 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
python基于selenium爬取斗鱼弹幕
Feb 20 Python
Python中time标准库的使用教程
Apr 13 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
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
PHP实现的json类实例
2015/07/28 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
使用Kivy将python程序打包为apk文件
2017/07/29 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
Python语言的变量认识及操作方法
2018/02/11 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
python实现数字炸弹游戏程序
2020/07/17 Python
python基于opencv 实现图像时钟
2021/01/04 Python
安全月活动总结
2014/05/05 职场文书
初一新生军训方案
2014/05/22 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python