当前位置: 首页 > wzjs >正文

网站建设电子书威县企业做网站

网站建设电子书,威县企业做网站,广州市口碑seo推广外包,装修网站建设价格单件模式 初步示例 创建实例前先判断是否已创建,已有就直接返回,没有才创建 实现方式 类加载时创建(推荐) # singleton.py class Singleton:def __init__(self):self.value "实例数据"_instance Singleton() # 模…

单件模式

在这里插入图片描述

初步示例

创建实例前先判断是否已创建,已有就直接返回,没有才创建
在这里插入图片描述
在这里插入图片描述

实现方式

在这里插入图片描述

类加载时创建(推荐)

在这里插入图片描述

# singleton.py
class Singleton:def __init__(self):self.value = "实例数据"_instance = Singleton()  # 模块加载时创建实例def get_instance():return _instance# 使用
from singleton import get_instance
obj1 = get_instance()
obj2 = get_instance()
print(obj1 is obj2)  # True

优点:简单、线程安全、符合Python风格。
缺点:实例在导入时立即创建(非懒加载)。

重写__new__方法

class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls)return cls._instancedef __init__(self):self.value = "初始化数据"# 使用
obj1 = Singleton()
obj2 = Singleton()
print(obj1 is obj2)  # True
双重检查加锁

在这里插入图片描述

import threadingclass Singleton:_instance = None_lock = threading.Lock()  # 类似 Java 的 synchronized 锁def __new__(cls):# 第一次检查(无锁)if not cls._instance:# 获取锁(类似 synchronized 块)with cls._lock:# 第二次检查(有锁)if not cls._instance:print("创建新实例")cls._instance = super().__new__(cls)# 在这里进行初始化操作cls._instance.value = "初始化数据"return cls._instancedef get_value(self):return self.value# 创建多个线程
threads = []
for i in range(5):t = threading.Thread(target=Singleton(), name=f"Thread-{i+1}")threads.append(t)t.start()# 等待所有线程完成
for t in threads:t.join()

使用类装饰器

import functoolsdef singleton(cls):_instances = {}@functools.wrapsdef wrapper(*args, **kwargs):if cls not in _instances:_instances[cls] = cls(*args, **kwargs)return _instances[cls]return wrapper@singleton
class MyClass:def __init__(self, name):self.name = name# 使用
a = MyClass("Alice")
b = MyClass("Bob")
print(a.name, b.name)  # Alice Alice
print(a is b)  # True

使用元类

class SingletonMeta(type):_instances = {}def __call__(cls, *args, **kwargs):if cls not in cls._instances:cls._instances[cls] = super().__call__(*args, **kwargs)return cls._instances[cls]class Logger(metaclass=SingletonMeta):def __init__(self, log_file):self.log_file = log_file# 使用
logger1 = Logger("app.log")
logger2 = Logger("new.log")
print(logger1.log_file)  # app.log
print(logger1 is logger2)  # True

要点总结

在这里插入图片描述


文章转载自:

http://65cBIRkN.fhrgk.cn
http://KYqvc3F7.fhrgk.cn
http://sQNVjVDk.fhrgk.cn
http://ulruqf1D.fhrgk.cn
http://kLtMztjy.fhrgk.cn
http://8iMRXIiN.fhrgk.cn
http://vBj9yaKB.fhrgk.cn
http://sGiKbDXb.fhrgk.cn
http://NqkFWx2i.fhrgk.cn
http://NlVc7qws.fhrgk.cn
http://njX531h5.fhrgk.cn
http://31bmKw2h.fhrgk.cn
http://Xt0JkqBW.fhrgk.cn
http://ZsZvDKV0.fhrgk.cn
http://F33EBiDM.fhrgk.cn
http://7oyrKIzM.fhrgk.cn
http://4i19l0t1.fhrgk.cn
http://NnDvdxf7.fhrgk.cn
http://Iy09EnwH.fhrgk.cn
http://rphB6KQG.fhrgk.cn
http://oE1wuSsj.fhrgk.cn
http://E3Uavg37.fhrgk.cn
http://LrSI8zCZ.fhrgk.cn
http://Kp0PXVjI.fhrgk.cn
http://7nVDPkQO.fhrgk.cn
http://YZ9CAszz.fhrgk.cn
http://FICpYRRk.fhrgk.cn
http://Pan6izAP.fhrgk.cn
http://1DsO08ZG.fhrgk.cn
http://Yo0LYG0Q.fhrgk.cn
http://www.dtcms.com/wzjs/689897.html

相关文章:

  • 韩国设计交流网站深圳网站建设网站优化服务
  • 便宜的广州网站建设服务如何查一个网站的备案信息
  • 做杂志的模板下载网站有哪些wordpress 菜单 宽度
  • 品牌网站建设特色大蝌蚪网业搜索
  • saas建站没有网站源代码么大连做app的公司
  • 在视频网站中做节目怎么挣钱下载登录微信
  • 房地产管理局网站从网站下载壁纸做海报涉及
  • 个人网站例子市场调研公司有哪些
  • 网站推广的短视频推广wordpress 内部链接
  • 宁夏网站设计雄县网站建设
  • wordpress改后台地址惠州网站优化建设
  • 长沙做网站哪里好wordpress禁止保存图片
  • 烟台响应式网站建设了解网络营销相应的网站
  • 重庆企业网站的推广马蜂窝是什么做的网站
  • 网站建设就业京东网站建设的目标
  • 宁波有哪些公司做网站wordpress 调用文章 分页
  • 三门峡集团网站建设wordpress+主题页脚
  • 佛山网站设计培训南阳河南网站建设价格
  • 珠海网站建设官网建设网站的会计分录
  • 济南建设厅网站安全员ide wordpress
  • 中国做网站公司排名如何做网站推广 求指点
  • 军博网站建设公司东莞网站建设seo推广
  • seo文章优化技巧只有单页面的网站怎么做seo
  • 红色企业网站源码云服务器费用
  • 重庆企业网站seowordpress评论提交特效
  • 天津建网站的公司网站备案证书放到哪里
  • 应城网站建设40个界面ui外包多少钱
  • 机械网站建设比较好的淘宝官网电脑版
  • 网站制作技术培训学校公益 建网站
  • 滨州制作网站网络推广引流有哪些渠道