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

用一个例子详细说明python单例模式

单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在需要控制资源(如数据库连接、文件系统等)的访问时非常有用。

下面是一个使用Python实现单例模式的例子:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

    def __init__(self, value):
        self.value = value

# 测试单例模式
singleton1 = Singleton(10)
singleton2 = Singleton(20)

print(singleton1.value)  # 输出: 20
print(singleton2.value)  # 输出: 20

print(singleton1 is singleton2)  # 输出: True

详细说明:

  1. _instance 类变量:这是一个类变量,用于存储单例实例。初始时它被设置为 None

  2. __new__ 方法:这是Python中的一个特殊方法,用于创建对象实例。在这个方法中,我们检查 _instance 是否为 None。如果是,则调用 super().__new__ 创建一个新的实例并将其赋值给 _instance。如果不是 None,则直接返回 _instance,这样就确保了只有一个实例存在。

  3. __init__ 方法:这是Python中的另一个特殊方法,用于初始化对象实例。在这个例子中,__init__ 方法接受一个 value 参数并将其赋值给实例变量 self.value。需要注意的是,即使我们创建了多个 Singleton 对象,__init__ 方法也会被多次调用,但 _instance 始终指向同一个实例。

  4. 测试代码:我们创建了两个 Singleton 对象 singleton1singleton2,并分别传入不同的值。由于单例模式的存在,singleton1singleton2 实际上是同一个对象,因此它们的 value 属性都是最后一次初始化时的值(即 20)。最后,我们使用 is 运算符验证 singleton1singleton2 是同一个对象。

输出结果:

20
20
True

这个例子展示了如何使用Python实现单例模式,并验证了无论创建多少个对象,实际上都只有一个实例存在。


http://www.kler.cn/a/527822.html

相关文章:

  • 图论——最小生成树
  • Redis代金卷(优惠卷)秒杀案例-单应用版
  • Google 和 Meta 携手 FHE 应对隐私挑战
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础组件实现)
  • 一文掌握ADB的安装及使用
  • 巴塞尔问题详解:计算所有正整数平方的倒数之和
  • 【AI论文】VideoAuteur:迈向长叙事视频
  • gentoo linux中安装希沃白板5
  • Docker技术简介
  • Longformer:处理长文档的Transformer模型
  • 6.二分算法
  • 舵机型号与识别
  • Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
  • 三天急速通关JavaWeb基础知识:Day 2 前端基础知识(计划有变,前端工程化部分暂时搁置)
  • Vue.js 生命周期钩子在 Composition API 中的应用
  • 《解锁DeepSeek本地部署:开启你的专属AI之旅》
  • 绝对值线性化
  • 【python】python基于机器学习与数据分析的手机特性关联与分类预测(源码+数据集)【独一无二】
  • Flink2支持提交StreamGraph到Flink集群
  • 使用 cmake
  • 书生大模型实战营6
  • 动态规划每日一练(四)
  • 算法11(力扣496)-下一个更大元素I
  • MATLAB-Simulink并行仿真示例
  • 前端 Vue 性能提升策略
  • DeepLens是一个用于计算镜头设计的可微光线追踪器