首页 > 其他分享 >单例

单例

时间:2023-10-18 17:34:03浏览次数:27  
标签:__ 单例 --- 导入 线程 模块

单例模式

单例是23种设计模式的一种,最简单的一种

https://www.cnblogs.com/liuqingzheng/p/10038958.html

什么是单例模式?

单例模式指的是:保证一个类仅有一个实例,并提供一个访问它的全局访问点

线程1 执行:

cursor.excute('select * from user')

线程2执行:

cursor.excute('select * from books')

线程1 执行

cursor.fetchAll() # 本来想取线程1的数据,但是拿出查询到的数据得到线程2的数据

综上,所以django ,每个线程,一个连接对象,不然就会数据错乱---》 有了连接池

使用单例五种方法

方法1、使用模块

其实,Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:

通俗来说,当第一次导入后会生成一个文件pyc,当后续再次使用这个模块导入时,就不会再执行代码了,会从pyc中直接拿出来用。

mysingleton.py

class Singleton(object):
    def foo(self):
        pass
singleton = Singleton()

将上面的代码保存在文件 mysingleton.py 中,要使用时,直接在其他文件中导入此文件中的对象,这个对象即是单例模式的对象

from mysingleton import singleton

 

方法2、使用装饰器

之前学的 装饰器,都是用来装饰 函数 ,装饰器可以用来装饰类

 执行结果为True

 

单例3、使用类方法

 

方法4、使用 __new__

通俗的讲解Python中的__new__()方法-CSDN博客

__init__ 和 __new__ 区别是什么
1 类()--->触发类中的__init__--->对象已经创建出来了,不能拦截住,做成单例了
2 类()--->触发类中的__new__--->真正的创建对象,判断之前有没有创建过,如果创建过,直接返回
3 懂了元类---》类()--->触发元类的 __call__--->判断之前有没有创建过,如果创建过,直接返回

 

标签:__,单例,---,导入,线程,模块
From: https://www.cnblogs.com/YeeQX/p/17772932.html

相关文章

  • 单例模式
    使用模块其实,**Python的模块就是天然的单例模式**,因为模块在第一次导入时,会生成`.pyc`文件,当第二次导入时,就会直接加载`.pyc`文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这......
  • 10月18日元类、单例模式
    目录1.元类复习1.什么是元类:2.所有类的元类是谁?3.如何自定义元类呢?4.__init__和__new__和__call__这三者的关系:2.单例模式1.元类复习1.什么是元类:因为一切皆对象这个思想,所以类也是对象,元类构造类,类是由元类实例化得到的2.所有类的元类是谁?是type,它是所有......
  • 10月18日单例模式
    目录单例模式值类的绑定方法,装饰器方式设计模式:实现单例模式的第一种方式第一种方式以类的绑定方法来实现实现单例模式的第二种方式实现单例模式的第三种方式单例模式的核心概念是:只有一个实例对象,而不管有多少人尝试访问它。第四种方法,通过模块导入(python的模块就是单例的体现)......
  • go语言使用单例模式封装数据库连接池
    packagesingledbimport( "gorm.io/driver/mysql" "gorm.io/gorm" "sync")//数据库连接对象只有一个var( db*gorm.DB Oncesync.Once//只执行一次某个操作的机制)funcGetDbInstance()*gorm.DB{ Once.Do(func(){ varerrerror dsn:=&q......
  • 单例模式--Java实现
    画类图具体代码实现//StudentNo.javapackageorg.example.design005;publicclassStudentNo{privatestaticStudentNoinstance=null;privateStudentNo(){}publicstaticStudentNogetInstance(){if(instance==null){System.ou......
  • 单例模式
    如题Java中单例模式的使用有很多方法1.懒汉式,饿汉式,等等用到哪个整理哪个懒汉式饿汉式双检查privatestaticCameraPhotographPresentersInstance;privateCameraPhotographPresenter(){}publicstaticCameraPhotographPresentergetInstance(){if(sInstance=......
  • Java设计模式-单例模式
    1、用到过的场景需要一样的对象放入数组中构建类的方式固定2、饿汉模式(不要用)packagecom.cc.eed.sin;/***<p>单例模式-饿汉(线程不安全)</p>**@authorCC*@since2023/10/12*/publicclassSingletonDemo2{privatestaticfinalSingletonDemo2......
  • C++ - 单例模式实现
    1.什么是单例模式单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。为什么需要单例模式两个原因:节省资源。一个类只有一个实例,不存在多份实例,节省资源。方便控制。在一些操作公共资源的场景时,避免了多个对象引起的复杂操作。但是在实现单例......
  • 单例
        ......
  • C++ - 单例模式实现
    1.什么是单例模式单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。为什么需要单例模式两个原因:节省资源。一个类只有一个实例,不存在多份实例,节省资源。方便控制。在一些操作公共资源的场景时,避免了多个对象引起的复杂操作。但是在实现单例......