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中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
浅谈Python基础之I/O模型
May 11 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
Python中调用其他程序的方式详解
Aug 06 Python
python的移位操作实现详解
Aug 21 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
Python深度学习之Pytorch初步使用
May 20 Python
OpenCV-Python实现轮廓拟合
Jun 08 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
js原型链原理看图说明
2012/07/07 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
OpenCV 模板匹配
2019/07/10 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
中层干部岗位职责
2013/12/18 职场文书
师范生见习报告
2014/10/31 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python