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

说明是同一个对象

  • 优点:
    • 对唯一实例的受控访问
    • 单例相当于全局变量,但访问了命名空间被污染
相关推荐
韩曙亮几秒前
【人工智能】AI 人工智能 技术 学习路径分析 ① ( Python语言 -> 微积分 / 概率论 / 线性代数 -> 机器学习 )
人工智能·python·学习·数学·机器学习·ai·微积分
极地星光25 分钟前
Qt/C++ 单例模式深度解析:饿汉式与懒汉式实战指南
c++·qt·单例模式
ZHE|张恒36 分钟前
设计模式(十八)命令模式 —— 将操作封装成对象,实现撤销、队列等扩展
设计模式·命令模式
喵叔哟41 分钟前
6.配置管理详解
后端·python·flask
曾经的三心草44 分钟前
基于正倒排索引的Java文档搜索引擎3-实现Index类-实现搜索模块-实现DocSearcher类
java·python·搜索引擎
MOMO陌染1 小时前
Python 饼图入门:3 行代码展示数据占比
后端·python
vvoennvv2 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
自学互联网3 小时前
使用Python构建钢铁行业生产监控系统:从理论到实践
开发语言·python
无心水3 小时前
【Python实战进阶】7、Python条件与循环实战详解:从基础语法到高级技巧
android·java·python·python列表推导式·python条件语句·python循环语句·python实战案例
xwill*3 小时前
RDT-1B: A DIFFUSION FOUNDATION MODEL FOR BIMANUAL MANIPULATION
人工智能·pytorch·python·深度学习