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

相关推荐
while(1){yan}21 小时前
JAVA单例模式
java·单例模式
Albert Edison2 天前
【项目设计】C++ 高并发内存池
数据结构·c++·单例模式·哈希算法·高并发
繁华似锦respect3 天前
HTTPS 中 TLS 协议详细过程 + 数字证书/签名深度解析
开发语言·c++·网络协议·http·单例模式·设计模式·https
yoyo君~4 天前
深入理解PX4飞控系统:多线程并发、原子操作与单例模式完全指南
学习·单例模式·机器人·无人机
繁华似锦respect5 天前
C++ 设计模式之单例模式详细介绍
服务器·开发语言·c++·windows·visualstudio·单例模式·设计模式
xunyan62345 天前
面向对象(下)-设计模式与单例设计模式
java·单例模式·设计模式
隔山打牛牛5 天前
单例模式:高效实现全局唯一实例
单例模式
stormsha6 天前
Java 设计模式探秘饿汉式与懒汉式单例模式的深度解析
java·单例模式·设计模式·java-ee
口袋物联6 天前
设计模式之单例模式在 C 语言中的应用(含 Linux 内核实例)
c语言·单例模式·设计模式
__万波__6 天前
二十三种设计模式(一)--单例模式
java·单例模式·设计模式