• 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用GET方法上传文件
  • Python正则表达式匹配HTML页面编码
  • Python交换变量
  • Python 创建子进程模块subprocess详解
  • Python实现豆瓣图片下载的方法
  • PYTHON压平嵌套列表的简单实现
  • 轻松掌握python设计模式之访问者模式
  • Python代码的打包与发布详解
  • 详解Python中的join()函数的用法
  • 由浅入深讲解python中的yield与generator

文章分类

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

最近更新的内容

    • 举例讲解Python中metaclass元类的创建与使用
    • 简单掌握Python的Collections模块中counter结构的用法
    • 各个系统下的Python解释器相关安装方法
    • python读取Android permission文件
    • python插入数据到列表的方法
    • 零基础写python爬虫之抓取百度贴吧代码分享
    • Python实现视频下载功能
    • 400多行Python代码实现了一个FTP服务器
    • Python中异常重试的解决方案详解
    • 在Python中定义和使用抽象类的方法

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

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