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

说明是同一个对象

  • 优点:
    • 对唯一实例的受控访问
    • 单例相当于全局变量,但访问了命名空间被污染
相关推荐
九狼1 分钟前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式
孟健15 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
静水流深_沧海一粟17 小时前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder17 小时前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
码路飞17 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽19 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程1 天前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪1 天前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
阿星AI工作室1 天前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
databook1 天前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效