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 相关文章推荐
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 Python
python实现扫描日志关键字的示例
Apr 28 Python
Django框架实现的分页demo示例
May 25 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
python实现文字版扫雷
Apr 24 Python
Python魔术方法专题
Jun 19 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
用python查找统一局域网下ip对应的mac地址
Jan 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
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
php语法检查的方法总结
2019/01/21 PHP
JS实现时间格式化的方式汇总
2013/10/16 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
python获取当前计算机cpu数量的方法
2015/04/18 Python
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python批量获取html内body内容的实例
2019/01/02 Python
Python tkinter和exe打包的方法
2020/02/05 Python
python怎么调用自己的函数
2020/07/01 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
教学实习自我评价
2014/01/28 职场文书
运动会通讯稿500字
2014/02/20 职场文书
毕业设计说明书
2014/05/07 职场文书
毕业证代领委托书
2014/09/26 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python