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

Python单例模式(3种常用方式)

Python单例模式

    • 1、使用模块(推荐)
    • 2、使用装饰器
    • 3、使用new()方法


单例模式是最常见的一种设计模式,该模式确保系统中一个类仅有一个实例

常用的三种实现方式如下:

1、使用模块(推荐)


模块是天然单例的,因为模块只会被加载一次,加载后,其他脚本若导入使用时,会从sys.modules中找到已加载好的模块,多线程下也是如此

编写Singleton.py脚本:

class MySingleton():def __init__(self, name, age):self.name = nameself.age = age

其他脚本导入使用:

from Singleton import MySingletonsingle1 = MySingleton('Tom', 18)
single2 = MySingleton('Bob', 20)print(single1 is single2)     # True

2、使用装饰器

# 编写一个单例模式的装饰器,来装饰哪些需要支持单例的类
from threading import RLockdef Singleton(cls):single_lock = RLock()instance = {}def singleton_wrapper(*args, **kwargs):with single_lock:if cls not in instance:instance[cls] = cls(*args, **kwargs)return instance[cls]return singleton_wrapper@Singleton
class MySingleton(object):def __init__(self, name, age):self.name = nameself.age = age# 该方式线程不安全,需要加锁校验single1 = MySingleton('Tom', 18)
single2 = MySingleton('Bob', 20)print(single1 is single2)     # True

3、使用new()方法


Python的__new__()方法是用来创建实例的,可以在其创建实例的时候进行控制

class MySingleton(object):single_lock = RLock()def __init__(self, name, age):self.name = nameself.age = agedef __new__(cls, *args, **kwargs):with MySingleton.single_lock:if not hasattr(MySingleton, '_instance'):MySingleton._instance = object.__new__(cls)return MySingleton._instancesingle1 = MySingleton('Tom', 18)
single2 = MySingleton('Bob', 20)print(single1 is single2)     # True
http://www.lryc.cn/news/172153.html

相关文章:

  • uni-app实现web-view图片长按下载
  • 深入理解Linux网络笔记(一):内核是如何接收网络包的
  • android系统目录结构
  • 怒刷LeetCode的第11天(Java版)
  • CentOS LVM缩容与扩容步骤
  • 开发者福利!李彦宏将在百度世界大会手把手教你做AI原生应用
  • 堆的OJ题
  • 物联网网关:连接设备与云端的桥梁
  • ChatGPT企业版来了,速度翻倍,无使用限制
  • opencv图像像素类型转换与归一化
  • 【自学开发之旅】Flask-前后端联调-异常标准化返回(六)
  • springcloud3 分布式事务解决方案seata之XA模式4
  • 编译ctk源码
  • 前后端分离的低代码快速开发框架
  • 【Java 基础篇】Java同步代码块解决数据安全
  • 亿纬锦能项目总结
  • 简明 SQL 组合查询指南:掌握 UNION 实现数据筛选
  • 【springMvc】自定义注解的使用方式
  • 求二维子数组的和(剖析)
  • 无(低)代码开发思路介绍
  • 代码随想录刷题 Day14
  • 二分类问题的解决利器:逻辑回归算法详解(一)
  • docker alpine镜像中遇到 not found
  • python的多线程多进程与多协程
  • 一文介绍使用 JIT 认证后实时同步用户更加优雅
  • 搞定“项目八怪”,你就是管理高手!
  • 机器视觉-标定篇
  • linux离线安装make
  • 【深度学习】卷积神经网络(LeNet)【文章重新修改中】
  • win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版