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

营销型网站建设 网络服务网站开发怎么学习

营销型网站建设 网络服务,网站开发怎么学习,网站怎么做直通车,网页设计思路说明200字理解单例模式之前,确实需要先掌握 __init__、__new__ 和 __call__ 这三个方法的作用和调用顺序。如有需要,读者可跳转下方链接学习: python中的__init__、__new__、__call__-CSDN博客 正文开始: 在Python中,单例模式&…

理解单例模式之前,确实需要先掌握 __init____new__ 和 __call__ 这三个方法的作用和调用顺序。如有需要,读者可跳转下方链接学习:
python中的__init__、__new__、__call__-CSDN博客

正文开始:
在Python中,单例模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点。

一、使用装饰器实现单例

原理:通过装饰器控制类的实例化过程,确保仅生成一个实例。
步骤

1. 定义一个装饰器函数。
2. 在装饰器中管理实例的创建和返回。

代码示例

def singleton_decorator(cls):print("装饰器执行(类定义时立即执行)")instances = {}def get_instance(*args, **kwargs):print("调用 get_instance()(实例化时执行)")if cls not in instances:        # 单例模式的关键点就在这里print("创建新实例")instances[cls] = cls(*args, **kwargs)return instances[cls]return get_instance@singleton_decorator
class SingletonClass:def __init__(self):print("调用 __init__()")self.data = "Singleton Data"# 测试
print("开始实例化")
a = SingletonClass()
print("------------")
b = SingletonClass()
print(a is b)  # 输出:True# 装饰器执行(类定义时立即执行)
# 开始实例化
# 调用 get_instance()(实例化时执行)
# 创建新实例
# 调用 __init__()
# ------------
# 调用 get_instance()(实例化时执行)
# True

二、元类实现单例重写__call__

原理:通过元类的 __call__ 方法控制实例创建流程。
步骤

1. 定义一个元类,重写 __call__ 方法。

2. 在元类中检查是否已存在实例。

代码示例

class SingletonMeta(type):_instances = {}def __call__(cls, *args, **kwargs):print("调用 __call__()")if cls not in cls._instances:cls._instances[cls] = super().__call__(*args, **kwargs)return cls._instances[cls]class SingletonClass(metaclass=SingletonMeta):def __init__(self):print("调用 __init__()")self.data = "Singleton Data"# 测试
a = SingletonClass()
b = SingletonClass()
print(a is b)  # 输出:True# 调用 __call__()
# 调用 __init__()
# 调用 __call__()
# True

三、重写 __new__ 

原理:通过重写类的 __new__ 方法,直接控制实例创建。
步骤

1. 在类中定义类变量存储实例。
2.在 __new__ 方法中返回已有实例或创建新实例。

代码示例

class SingletonClass:_instance = Nonedef __new__(cls, *args, **kwargs):print("__new__")if not cls._instance:cls._instance = super().__new__(cls)return cls._instancedef __init__(self):print("__init__")self.data = "Singleton Data"# 测试
a = SingletonClass()
b = SingletonClass()
print(a is b)  # 输出:True# __new__
# __init__
# __new__
# __init__
# True

四、线程安全的单例模式

问题:上述方法在并发环境下可能创建多个实例。
解决方案:加锁(如 threading.Lock)确保线程安全。

代码示例(元类 + 线程安全)​

import threadingclass SingletonMeta(type):"""单例模式的元类实现。控制类的实例化过程,确保线程安全且唯一实例。"""_instances = {}  # 保存所有单例类的实例(键是类,值是实例)_lock = threading.Lock()  # 线程锁def __call__(cls, *args, **kwargs):# 第一次检查:避免已存在实例时不必要的加锁if cls not in cls._instances:# 加锁确保线程安全with cls._lock:# 第二次检查:防止其他线程已创建实例if cls not in cls._instances:# 创建实例并保存instance = super().__call__(*args, **kwargs)cls._instances[cls] = instance# 返回已存在的实例return cls._instances[cls]class Singleton(metaclass=SingletonMeta):"""单例类示例。通过元类 SingletonMeta 控制实例唯一性。"""def __init__(self):# 初始化代码(只会执行一次)self._data = "单例数据"print("Singleton 初始化完成")# 测试多线程环境下的单例行为
def create_singleton():obj = Singleton()print(id(obj))if __name__ == "__main__":threads = []for _ in range(5):t = threading.Thread(target=create_singleton)threads.append(t)t.start()for t in threads:t.join()# Singleton 初始化完成
# 1807031580512
# 1807031580512
# 1807031580512
# 1807031580512
# 1807031580512


文章转载自:

http://Y1GL3k7A.bkctL.cn
http://nhnn3lfP.bkctL.cn
http://y8xm56eq.bkctL.cn
http://EW3q5c1w.bkctL.cn
http://d0Jxxqgr.bkctL.cn
http://FVKohcEV.bkctL.cn
http://HKEWO6aY.bkctL.cn
http://yr7phUVA.bkctL.cn
http://SIoY2pyI.bkctL.cn
http://w3Qee9Wx.bkctL.cn
http://qDpSazeI.bkctL.cn
http://3nAfLAGS.bkctL.cn
http://waovalm6.bkctL.cn
http://25hnmdMp.bkctL.cn
http://6a9FWaPR.bkctL.cn
http://jt6IzOrS.bkctL.cn
http://EFs0lLcb.bkctL.cn
http://VU9hu5rr.bkctL.cn
http://YY9UsLjY.bkctL.cn
http://rUquDI8J.bkctL.cn
http://DpJ8I6wJ.bkctL.cn
http://uvqRfb4P.bkctL.cn
http://o8f7867v.bkctL.cn
http://5gKjYi8m.bkctL.cn
http://hElemIly.bkctL.cn
http://JpvieeyG.bkctL.cn
http://b33xHMox.bkctL.cn
http://f0JUThlD.bkctL.cn
http://KRhhikk7.bkctL.cn
http://q3jhebI4.bkctL.cn
http://www.dtcms.com/wzjs/741891.html

相关文章:

  • php网站开发实例网络舆情的网站
  • 济南专业网站制作公司音乐制作软件哪个好
  • 除了外链 还有什么办法使网站提高排名企业微信怎么下载
  • 住房建设部官方网站公示公告网站图片下载 代码
  • 商城网站源码下载湖州网站设计
  • 微信微网站是什么案例工业机器人技术
  • 健康养生网站源码广州市建设工程检测协会网站
  • 北京美陈设计制作公司新企业网站应该怎么做SEO优化
  • 看男女做那个视频网站建设网站要不要工商执照
  • 网站建设征集意见广告设计与制作用什么软件
  • 网站域名到期时间查询wordpress建哪些网站吗
  • 房产网站怎么推广域名托管
  • 网站的注册页面怎么做哈尔滨发布信息的网站
  • 网站建设相关技术企业网络平台建设
  • 福建设备公司网站简繁英3合1企业网站生成管理系统
  • 建设部标准定额网站seo教程之关键词是什么
  • 太原网站开发哪家好net实用网站开发
  • 网站的建设运营收费是哪些湘潭高端网站建设
  • 松江团购做网站常州做网上废品收购网站
  • 广州网站建设阿里云手机上如何制作小程序
  • 正规网站建设定制wordpress postgresql
  • 网站1级域名换2级的影响收录吗简历在线编辑免费
  • asp 女性 美容 知识 网站 源码品牌建设工作计划
  • 网络建站系统学编程要多少钱
  • 网站报404错误怎么解决护肤品网站优化案例
  • 医院做网站是最简单的前端吗发帖子最好的几个网站
  • 怎么运营自己的网站wordpress 打开慢方法
  • 常用网站后缀seo公司服务
  • 有哪些是外国人做的网站吗艺点意创官网
  • 佛山网站建设网站建设wordpress前台页面显示文章图片