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

相关推荐
summer__777712 小时前
step6:改用单例模式
单例模式
喜欢猪猪16 小时前
Spring 框架中都用到了哪些设计模式:单例模式、策略模式、代理模式
spring·单例模式·设计模式
且随疾风前行.1 天前
技术成神之路:设计模式(一)单例模式
单例模式·设计模式
summer__77771 天前
单例模式(下)
qt·单例模式
知道了啊2 天前
javascript设计模式---单例模式
javascript·单例模式·设计模式
胡歌_北京分歌2 天前
【设计模式】【创建型5-1】【单例模式】
单例模式·设计模式
dike89892 天前
聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。
经验分享·笔记·其他·单例模式·vim
zls3653653 天前
.NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
开发语言·单例模式·c#·.net
sg_knight4 天前
如何在dart中实现单例模式
flutter·单例模式·设计模式·dart
枪哥玩转嵌入式4 天前
什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?
单片机·单例模式·51单片机