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 28 Python
Python中IPYTHON入门实例
May 11 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python实现12306火车票抢票系统
Jul 04 Python
简单了解Django ContentType内置组件
Jul 23 Python
django-初始配置(纯手写)详解
Jul 30 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
利用Python计算KS的实例详解
Mar 03 Python
scrapy redis配置文件setting参数详解
Nov 18 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的access操作类
2008/04/09 PHP
PHP 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
实例解析php的数据类型
2018/10/24 PHP
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
详解Python中的strftime()方法的使用
2015/05/22 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
公司口号大全
2014/06/11 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
竞赛口号大全
2014/06/16 职场文书
员工安全责任书范本
2014/07/24 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
三好学生竞选稿
2015/11/21 职场文书