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的另外几种语言实现
Jan 29 Python
Python中的浮点数原理与运算分析
Oct 12 Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
python浪漫表白源码
Apr 05 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
python程序变成软件的实操方法
Jun 24 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
numpy 声明空数组详解
Dec 05 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 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的无限分类实现想法~
2007/01/02 PHP
php whois查询API制作方法
2011/06/23 PHP
PHP header函数分析详解
2011/08/06 PHP
php UBB 解析实现代码
2011/11/27 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
Jquery 扩展方法
2010/05/06 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python内置函数dir详解
2015/04/14 Python
python处理html转义字符的方法详解
2016/07/01 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python错误的处理方法
2020/06/23 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
大专生简历的自我评价
2013/11/26 职场文书
实习生求职自荐信
2014/02/07 职场文书
总结表彰大会主持词
2014/03/26 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
七夕情人节问候语
2015/11/11 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android