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爬虫之HTTP异常处理
Nov 05 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
Python中extend和append的区别讲解
Jan 24 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
Flask-WTF表单的使用方法
Jul 12 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
python 实现单通道转3通道
Dec 03 Python
python实现猜单词游戏
May 22 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 Python
Python OpenCV实现图像模板匹配详解
Apr 07 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中数组首字符过滤功能代码
2012/07/31 PHP
php二维数组转成字符串示例
2014/02/17 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
为什么是 Python -m
2020/06/19 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
德国拖鞋网站:German Slippers
2019/11/08 全球购物
servlet面试题
2012/08/20 面试题
优秀志愿者事迹材料
2014/02/03 职场文书
酒店总经理助理职责
2014/02/12 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
考博专家推荐信
2014/05/10 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python