python单例模式的实现方式(代码片段)

yushenglin yushenglin     2022-12-13     310

关键词:

一.单例类

单例模式(Singleton Pattern)是 Python 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意点:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

二.单例模式实现方式

# 1.使用__new__方法实现:
class MyTest(object): _instance = None def __new__(cls, *args, **kw): if not cls._instance: cls._instance = super().__new__(cls, *args, **kw) return cls._instance
class Mytest(MyTest): a = 1

# 结果如下
>>> a = MyTest()
>>> b = MyTest()
>>> a == b
True
>>> a is b
True
>>> id(a), id(b)
(2339876794776,2339876794776)
 
 
# 2.装饰器方式实现
def outer(cls, *args, **kw):
instance =

def inner():
if cls not in instance:
instance[cls] = cls(*args, **kw)
return instance[cls]

return inner


@outer
class Mytest(object):
def __init__(self):
self.num_sum = 0

def add(self):
self.num_sum = 100
# 结果如下
>>> a = MyTest()
>>> b = MyTest()
>>> id(a), id(b)
(1878000497048,1878000497048)

 

# 3.使用元类实现
class Mytest(type):
_instances =
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]

# Python2
class MyTest(object):
__metaclass__ = Mytest


# Python3
class MyTest(metaclass=Mytest):
  pass
>>> a = MyTest()
>>> b = MyTest()
>>> id(a), id(b)
(1878000497048,1878000497048)

单例模式(代码片段)

...得在实例化这个类的对象的时候内存中只放着一份对象。python单例模式的实现有很多种方式,这里只列出本人常用的两种方式,其中第二种是Django源码使用的方式newfromthreadingimportLockfromthreadingimportThread,current_threadimporttimelock=Lock()... 查看详情

单例模式详解(代码片段)

单例模式的几种实现方式单例模式的实现有多种方式,如下所示:1、懒汉式,线程不安全是否Lazy初始化:是是否多线程安全:否实现难度:易描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为... 查看详情

单例模式的3种实现方式(代码片段)

1.在单例类被加载的时候实例化,这种实现方式被称为饿汉模式。1publicclassSingleton2privatestaticSingletoninstance;34static5instance=newSingleton();678privateSingleton()91011publicstaticSingletongetInstance()12returninstance;1 查看详情

python实现单例模式的几种方式(代码片段)

...#xff0c;可以更好地进行数据同步控制,避免多重占用。Python实现单例模式使用装饰器方式实现函数装饰器方式defsingleton(cls):#创建一个字典用来保存被装饰类的实例对象_instance=def_singleton(*args,**kwargs):#判断这个类有没有创建... 查看详情

进阶12自学笔记python单例模式实现的几种方式(代码片段)

...是同一个实例对象,因此s1iss2的结果为True。  实例2:Python还提供了一种更简洁的方式来实现单例模式,那就是使用call方法。具体而言,我们只需要将要实现单例模式的类定义为一个callable对象,并在类中定义call方法,这个类... 查看详情

python5种方法实现单例模式(代码片段)

...个类应该只关心内部逻辑,而不关心外面怎么样来实例化Python实现方式1,元类实现:classMetaClass(ty 查看详情

单例模式5种实现方式(代码片段)

1.懒汉模式publicclassSingletonprivatestaticSingletoninstance;privateSingleton()publicstaticSinglentongetInstance()if(instance==null)instance=newSingleton();returninstance;2.Doubleclicklock实现单例3.静态内部类实现单例4.枚举实现单例5.容器实现单例 查看详情

单例模式(代码片段)

单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这... 查看详情

关于单利模式的几种实现方式(代码片段)

单例模式是java中非常常见的一种设计模式,也是java学习中很热门的一个知识模块,今天就和大家一起来了解一下单例模式和单例模式的几种实现方式。  单例模式的定义:  单例模式是指某个类只有一个实例,并... 查看详情

单例模式(上)单例常见的实现方式(代码片段)

...果有些数据在系统中只应保存一份,那就比较适合设计为单例类。比如,配置信息类。在系统中,我们只有一个配置文件,当配置文件被加载到内存之后,以对象的形式存在,也理所应当只有一份。再比如,唯一递增ID号码生成... 查看详情

单例模式5种实现方式(代码片段)

1.懒汉模式publicclassSingletonprivatestaticSingletoninstance;privateSingleton()publicstaticSinglentongetInstance()if(instance==null)instance=newSingleton();returninstance;2.Doubleclicklock实现单例 查看详情

几种单例模式实现方式及其优缺点分析(代码片段)

什么是单例模式确保一个类只有一个实例,也就是类有且仅有一个对象,并且提供一个全局的访问点,外部通过这个访问点来访问该类的唯一实例单例模式的特点单例类只能有一个实例;单例类必须自己创建自己的唯一实例;单... 查看详情

单例模式(代码片段)

  单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式,本文还会介绍其他几种实现单... 查看详情

单例模式几种实现方式(代码片段)

1、饿汉式:静态常量    特点:单例的实例被声明成static和final变量了,在第一次加载类到内存中时就会初始化,所以会创建实例本身是线程安全的publicclassSingletonprivatefinalstaticSingletoninstance=newSingleton();privateSingleton... 查看详情

单例模式(代码片段)

...持,这种就可以通过单例模式来实现。下面介绍一下她在python中的几种实现方式。 装饰器方式这种实现方式是将单例封装在一个装饰器中,然后使用的时候直接装饰她即可。defSingleton(cls):_instance=def_singleton(*args,**kwargs):ifclsnot... 查看详情

单例模式(饿汉方式懒汉方式)(代码片段)

单例模式1.饿汉方式(线程安全的)(1)代码实现(2)饿汉方式的优缺点优点缺点2.懒汉方式(1)代码实现①懒汉实现版本一(非线程安全的)②版本二:可以保证线程安全,锁粒... 查看详情

设计模式创建型模式之单例设计模式(代码片段)

【设计模式】创建型模式之单例设计模式文章目录【设计模式】创建型模式之单例设计模式1.概述2.结构3.实现3.1饿汉式:静态变量方式实现3.2饿汉式:静态代码块方式实现3.3饿汉式:枚举方式实现(推荐)3.4懒汉式:... 查看详情

python3.6_单例模式(代码片段)

...1.使用模块2.使用__new__3.使用装饰器4.使用元类使用模块:python的模块就是天然的单例模式,因为模块在第一次导入的时候,会生成.pyc的文件,在第二次导入的时候就会直接加载.pyc文件,而不会再次执行模块代码使用__new__:#实... 查看详情