【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("呵呵")
  • 并发

相关推荐
晨星05274 小时前
软件设计模式之单例模式
单例模式·设计模式
code bean2 天前
【wpf】WPF开发避坑指南:单例模式中依赖注入导致XAML设计器崩溃的解决方案
单例模式·wpf
是三好3 天前
单例模式(Singleton Pattern)
java·开发语言·算法·单例模式
青春易逝丶4 天前
单例模式
单例模式
YA3334 天前
java设计模式一、单例模式
java·单例模式·设计模式
枫景Maple4 天前
Unity中多线程与高并发下的单例模式
unity·单例模式·游戏引擎
iiiiaaiashah5 天前
单例模式的mock类注入单元测试与友元类解决方案
java·开发语言·单例模式
jingfeng5148 天前
线程池及线程池单例模式
linux·开发语言·单例模式
Brookty8 天前
深入解析Java并发编程与单例模式
java·开发语言·学习·单例模式·java-ee
Meteors.9 天前
23种设计模式——单例模式(Singleton)详解
单例模式·设计模式