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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python中os和shutil模块实用方法集锦
May 13 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
pip matplotlib报错equired packages can not be built解决
Jan 06 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
Python反射和内置方法重写操作详解
Aug 27 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
快速排序的四种python实现(推荐)
Apr 03 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
python如何做代码性能分析
Apr 26 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
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
土地转让协议书
2014/04/15 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
大学生暑期实践报告
2015/07/13 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
MySql新手入门的基本操作汇总
2021/05/13 MySQL
使用feign服务调用添加Header参数
2021/06/23 Java/Android