首页 > 编程语言 >Python设计模式-04-单例模式

Python设计模式-04-单例模式

时间:2023-06-16 18:24:11浏览次数:47  
标签:__ Singleton get Python instance 单例 设计模式 cls

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式通常包括以下几个角色:

  • 单例(Singleton):定义了一个静态方法或类方法,用于获取单例对象。
  • 客户端(Client):使用单例对象来完成具体的操作。

下面是一个简单的 Python 示例,演示了如何使用单例模式创建一个只有一个实例的类:

class Singleton:
    __instance = None

    @classmethod
    def get_instance(cls):
        if cls.__instance is None:
            cls.__instance = cls()
        return cls.__instance

    def __init__(self):
        if self.__class__.__instance is not None:
            raise Exception('Singleton class cannot be instantiated more than once.')

singleton1 = Singleton.get_instance()
singleton2 = Singleton.get_instance()

print(singleton1 is singleton2)  # 输出 True

在上面的示例中,我们定义了一个单例类 Singleton,它包含一个静态方法 get_instance(),用于获取单例对象。在 get_instance() 方法中,我们首先检查类属性 __instance 是否为 None,如果是,则创建一个新的单例对象,并将其赋值给 __instance 属性。如果不是,则直接返回 __instance 属性。在单例类的构造函数中,我们使用self.__class__.__instance 来检查单例对象是否已经存在,如果已经存在,则抛出异常,防止单例类被实例化多次。

在使用单例模式时,我们可以通过调用单例类的静态方法 get_instance() 来获取单例对象。由于单例类只有一个实例,因此多次调用 get_instance() 方法会返回同一个对象。需要注意的是,单例模式可能会导致全局状态的存在,因此需要谨慎使用。

标签:__,Singleton,get,Python,instance,单例,设计模式,cls
From: https://www.cnblogs.com/superhin/p/17486248.html

相关文章

  • Python设计模式-05-适配器模式
    适配器模式是一种结构型设计模式,它可以将一个类的接口转换成客户端所期望的另一个接口。适配器模式通常包括以下几个角色:目标接口(Target):定义了客户端所期望的接口,可以是一个抽象类或接口。适配器(Adapter):实现了目标接口,并持有一个被适配对象的引用,负责将客户端的请求转换成被适......
  • Jenkins-Slave节点 电脑A控制电脑B运行Python脚本
    电脑A装了Jenkins的服务器,电脑B作为Jenkins的节点电脑(Slave)Jenkins服务的配置1、ManageJenkins>ConfigureSystem 找到JenkinsURL,确保不是127.0.0.1或者localhost就可以了。 2、ManageJenkins>ConfigureGlobalSecurity找到代理,设置端口或者选择随机选取,再把代......
  • Python设计模式-02-建造者模式
    建造者模式是一种创建型设计模式,它可以将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括以下几个角色:产品(Product):表示被构建的复杂对象,通常包含多个部分或组件。抽象建造者(Builder):定义了创建产品的抽象接口,包括创建产品的各个部......
  • python自动使用虚拟环境和安装依赖
    代码如下,Windows环境测试通过importosimportplatformimportreimportsysfrompathlibimportPathdefis_venv()->bool:"""判断是否处于虚拟环境(也适用于poetry的)"""ifhasattr(sys,"real_prefix"):returnTruer......
  • Python - 方法参数中,带self和不带self的区别
    不带self该python文件中,没有类的概念。因此所有的方法参数中,没有self#文件名solution.pydefpartition(head:Optional[ListNode],x:int)->Optional[ListNode]:#...if__name__=='__main__':#注意这里的区别...partition() 如果未来要在其他类里......
  • python中parse的action = store_true含义
     我们在python脚本中经常看到action="store_true,如下图: parser.add_argument('--image',default=False,action="store_true",help='Imagedetectionmode,willignoreallpositionalarguments') 如果运行代码时加了   --image,那么im......
  • 用python生成正玄波信号源码解析
    一前记项目需要生成不同频点的正玄波信号,没找到现成的软件,只能自己写一个了。顺便温习一下python。 二源码解析:#!/usr/bin/pythonimportnumpyasnpfromscipyimportsignalimportwaveimportstructimportsysnum_samples=48000sampling_rate=48000.0ampl......
  • python configparser读取配置文件
    #coding:utf-8importconfigparserimportosimportjsonbase_path=os.path.dirname(os.path.abspath(__file__))conf_file=os.path.join(base_path,"config.ini")defread_config():#读取配置文件信息try:cf=configparser.ConfigParser()......
  • python 读取yaml配置文件
    #coding:utf-8importyaml#pipinstallpyyamlimportosimportjsonbase_path=os.path.dirname(os.path.abspath(__file__))conf_file=os.path.join(base_path,"db.yaml")defread_yaml():#读取配置文件信息try:f=open('db.yaml&#......
  • Python元组(tuple)和字典(dict)的合并使用
    Python包含6种数据类型,其中Number(数字)、String(字符串)、Tuple(元组)、 List(列表)、Dictionary(字典)、Set(集合);1.回顾Tuple(元组)的常用方法:Tuple的创建:tuple()方法创建,或者小括号的方式,有时也直接省略小括号a=tuple(range(10))b=tuple('hkd')c=tuple([1,2,3])PS:tuple()......