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创建临时文件夹的方法
Jul 06 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
itchat接口使用示例
Oct 23 Python
python如何生成网页验证码
Jul 28 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
在vscode中配置python环境过程解析
Sep 28 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 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简单提示框alert封装函数
2010/08/08 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php浏览历史记录的方法
2015/03/10 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
Vue实现手机计算器
2020/08/17 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python批量替换多文件字符串问题详解
2018/04/22 Python
python感知机实现代码
2019/01/18 Python
python实现桌面壁纸切换功能
2019/01/21 Python
Python容器类型公共方法总结
2020/08/19 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
.NET常见笔试题集
2012/12/01 面试题
硕士研究生个人求职信
2013/12/04 职场文书
住房公积金接收函
2014/01/09 职场文书
党员四风剖析材料
2014/08/27 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
frg-100简单操作(设置)说明
2022/04/05 无线电