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实现求最大公约数及判断素数的方法
May 26 Python
Python 迭代器工具包【推荐】
May 06 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
python使用folium库绘制地图点击框
Sep 21 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
使用Pytorch来拟合函数方式
Jan 14 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
pytorch 查看cuda 版本方式
Jun 23 Python
如何解决安装python3.6.1失败
Jul 01 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 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 广告调用类代码(支持Flash调用)
2011/08/11 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
php常见的魔术方法详解
2014/12/25 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
讲解python参数和作用域的使用
2013/11/01 Python
简单的通用表达式求10乘阶示例
2014/03/03 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
在Django中实现添加user到group并查看
2019/11/18 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
python 绘制正态曲线的示例
2020/09/24 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
机电专业个人求职信范文
2013/12/30 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
中学家长会邀请函
2014/02/03 职场文书
主题婚礼策划方案
2014/02/10 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Python图像处理库PIL详细使用说明
2022/04/06 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
python实现学员管理系统(面向对象版)
2022/06/05 Python
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS