【Python进阶】单例模式

1.单例模式
  • 作用: 保证某一类只有一个实例存在
2.实现单例模式的方式
  • 模块导入
    *

    复制代码
      文件1.py
    
          class Test:
    
              def __init__(self,name):
    
    
                  self.name = name
    
    
    
          obj = Test("何必")
    
    
      文件2.py
    
        from 文件1.py import obj  # 仅有一个实例对象
  • 类装饰器
    *

    复制代码
      def singleton_model(func):
    
          obj = None
    
          def wrapper(*args,**kwargs):
    
              nonlocal obj
    
              if not obj:
    
                   obj = func(*args,**kwargs)
    
              return obj
          return wrapper
    
    
      @singleton_model  # Test = singleton_model(Test)
      class Test:
           def __init__(self,name):
    
              self.name = name
    
      obj = Test("何必")
    
      obj2 = Test("呵呵") #得到的对象内存地址跟obj一致
  • 类绑定方法
    *

    复制代码
      class Test:
    
          obj = None
    
          def __init__(self,name):
    
              self.name = name
    
    
          @classmethod
    
          def get_obj(cls,*args,**kwargs):  # 在类方法内部处理
    
              if not cls.obj:
    
                  cls.obj = cls(*args,**kwargs)
    
              return cls.obj
    
    
      obj = Test.get_obj("何必")
  • __new__方法
    *

    复制代码
      class Test:
    
          obj = None
    
          def __init__(self,name):
    
              self.name = name
    
    
          def __new__(cls,*args,**kwargs):
    
              if not cls.obj:
    
                  cls.obj = super().__new__(cls)
    
              return cls.obj
    
    
      obj = Test("何必")
    
      obj2 = Test("呵呵")
  • 元类
    *

    复制代码
      class MyType(type):
    
          obj = None
    
          def __call__(self,*args,**kwargs):
    
              if not self.obj:
                  
                  self.obj = self.__new__(self)
    
              self.__init__(self.obj,*args,**kwargs)
                  
              return self.obj    
    
    
      class Test(metaclass=MyType):
    
    
          def __init__(self,name):
    
              self.name = name
    
    
         
    
    
      obj = Test("何必")
    
      obj2 = Test("呵呵")
  • 并发

相关推荐
大数据新鸟1 天前
单例模式的变种
单例模式
yaaakaaang1 天前
一、单例模式
单例模式
Yupureki1 天前
《Linux系统编程》20.常见程序设计模式
linux·服务器·c语言·c++·单例模式·建造者模式·责任链模式
pedestrian_h2 天前
Java单例模式回顾
java·单例模式·设计模式
苏渡苇2 天前
枚举的高级用法——用枚举实现策略模式和状态机
java·单例模式·策略模式·枚举·状态机·enum
·心猿意码·4 天前
C++ 线程安全单例模式的底层源码级解析
c++·单例模式
南境十里·墨染春水4 天前
C++传记 详解单例模式(面向对象)
开发语言·c++·单例模式
无籽西瓜a5 天前
【西瓜带你学设计模式 | 第一期-单例模式】单例模式——定义、实现方式、优缺点与适用场景以及注意事项
java·后端·单例模式·设计模式
格图素书6 天前
大数据在电力行业的应用案例解析-【电力技术】(零)大数据在电力行业的典型落地案例(序)
大数据·单例模式
chushiyunen7 天前
python单例模式、大模型一次加载多次复用
开发语言·python·单例模式