• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 常见的在Python中实现单例模式的三种方法

常见的在Python中实现单例模式的三种方法

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python 单例模式,单例模式的实现,枚举实现单例模式,单例模式的实现方式,java实现单例模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。在Python中,单例模式有以下几种实现方式。

方法一、实现__new__方法,然后将类的一个实例绑定到类变量_instance上;如果cls._instance为None,则说明该类还没有被实例化过,new一个该类的实例,并返回;如果cls._instance不为None,直接返回_instance,代码如下:

class Singleton(object):
 
  def __new__(cls, *args, **kwargs):
    if not hasattr(cls, '_instance'):
      orig = super(Singleton, cls)
      cls._instance = orig.__new__(cls, *args, **kwargs)
    return cls._instance
 
class MyClass(Singleton):
  a = 1
 
one = MyClass()
two = MyClass()
 
#one和two完全相同,可以用id(), ==, is检测
print id(one)  # 29097904
print id(two)  # 29097904
print one == two  # True
print one is two  # True
</div>

方法二、本质上是方法一的升级版,使用__metaclass__(元类)的高级python用法,具体代码如下:

class Singleton2(type):
 
  def __init__(cls, name, bases, dict):
    super(Singleton2, cls).__init__(name, bases, dict)
    cls._instance = None
 
  def __call__(cls, *args, **kwargs):
    if cls._instance is None:
      cls._instance = super(Singleton2, cls).__call__(*args, **kwargs)
    return cls._instance
 
class MyClass2(object):
  __metaclass__ = Singleton2
  a = 1
 
one = MyClass2()
two = MyClass2()
 
print id(one)  # 31495472
print id(two)  # 31495472
print one == two  # True
print one is two  # True
</div>


方法三、使用Python的装饰器(decorator)实现单例模式,这是一种更Pythonic的方法;单利类本身的代码不是单例的,通装饰器使其单例化,代码如下:

def singleton(cls, *args, **kwargs):
  instances = {}
  def _singleton():
    if cls not in instances:
      instances[cls] = cls(*args, **kwargs)
    return instances[cls]
  return _singleton
 
@singleton
class MyClass3(object):
  a = 1
 
one = MyClass3()
two = MyClass3()
 
print id(one)  # 29660784
print id(two)  # 29660784
print one == two  # True
print one is two  # True
</div>

</div>

您可能想查找下面的文章:

  • Python单例模式实例详解
  • python相似模块用例
  • Python设计模式中单例模式的实现及在Tornado中的应用
  • 常见的在Python中实现单例模式的三种方法
  • python单例模式实例分析
  • 常见的在Python中实现单例模式的三种方法
  • python单例模式实例分析
  • Python单例模式实例分析
  • Python单例模式实例分析
  • Python设计模式之单例模式实例

相关文章

  • python中使用pyhook实现键盘监控的例子
  • 在Python编程过程中用单元测试法调试代码的介绍
  • python实现模拟按键,自动翻页看u17漫画
  • 使用Node.js和Socket.IO扩展Django的实时处理功能
  • python中List的sort方法指南
  • Python安装第三方库及常见问题处理方法汇总
  • Python实现给文件添加内容及得到文件信息的方法
  • 利用Python开发微信支付的注意事项
  • python开发简易版在线音乐播放器
  • Python StringIO模块实现在内存缓冲区中读写数据

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 利用python生成一个导出数据库的bat脚本文件的方法
    • 在Python中使用mongoengine操作MongoDB教程
    • Windows和Linux下使用Python访问SqlServer的方法介绍
    • Python中getattr函数和hasattr函数作用详解
    • python Django批量导入不重复数据
    • 在Python中关于中文编码问题的处理建议
    • Python中使用插入排序算法的简单分析与代码示例
    • 在Python程序中操作文件之flush()方法的使用教程
    • Python获取央视节目单的实现代码
    • 用Python计算三角函数之atan()方法的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有