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

说明是同一个对象

  • 优点:
    • 对唯一实例的受控访问
    • 单例相当于全局变量,但访问了命名空间被污染
相关推荐
belldeep3 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
benchmark_cc4 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想5 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合5 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全
别问!问就是全会7 小时前
Jupyter Notebook 安装包下载|单元格分块运行,图表直接内嵌
ide·python·其他·jupyter
深蓝AI7 小时前
Python 缓存击穿实测:16 个并发请求如何只回源 1 次
python
benchmark_cc7 小时前
用 00700.HK 做港股行情清洗:字段核对、校验与个人量化开发实践
python·数据分析·pandas·量化交易·股票数据·quantdash
zh路西法8 小时前
【PACE】面向永磁同步电机PMSM 执行器的参数辨识与能耗感知强化学习 Sim-to-Real
python·cma-es·pmsm·sim-to-real·issac·pace