5.python设计模式【单例模式】

  • 内容:保证一个类只有一个实例,并提供一个访问它的全局访问点
  • 角色:
    • 单例(Singleton)
  • UML图
  • 举个例子:
    需求:一个类只能实例化一个对象,不能实例化多个对象
python 复制代码
from abc import abstractmethod,ABCMeta
'''
__new__:
在基础类object中,__new__被定义成了一个静态方法,并且需要传递一个参数cls。Cls表示需要实例化的类,此参数在实例化时由Python解析器自动提供。
new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,
在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,
new()决定是否要使用该init()方法,
因为new()可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例。

hasattr(cls,"_instance"):
判断这个类是否已经实例化

'''


class Singleton:
   def __new__(cls, *args, **kwargs):
       # 如果没有实例化,就实例化
       if not hasattr(cls,"_instance"):
           cls._instance=super(Singleton,cls).__new__(cls)
       return cls._instance

class MyClass(Singleton):
   def __init__(self,a):
       self.a=a

a=MyClass(10)
b=MyClass(20)

print(a.a)
print(b.a)
print(id(a),id(b))

输出结果

20

20

139718467807696 139718467807696

说明是同一个对象

  • 优点:
    • 对唯一实例的受控访问
    • 单例相当于全局变量,但访问了命名空间被污染
相关推荐
问天_观心6 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨6 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
阿童木写作7 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
梦想的颜色7 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
禹凕7 小时前
Dijkstra算法详解与应用
python·算法
别走!万哥爱你8 小时前
Python 中可以用于在已排序的列表中查找特定元素的位置的是什么?
python
wxwx_bscxy3229 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
TechWayfarer9 小时前
Cloudflare 9·15新政倒计时:用IP风险画像识别AI爬虫,防止误伤Googlebot
网络·人工智能·爬虫·python·tcp/ip·网络安全
禹凕10 小时前
滑动窗口算法实战指南
python·算法
论文复现现场10 小时前
RTX 4090 24GB 能跑 Qwen3.8-27B 吗?单卡显存计算与云端部署指南
人工智能·python·云计算·llama·gpu算力