位置: 编程技术 - 正文

5种Python单例模式的实现方式(单例 python)

编辑:rootadmin

推荐整理分享5种Python单例模式的实现方式(单例 python),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python单子,python 单例类,py单例模式,py单例模式,python 单例,python 简单例子,python单子,py单例模式,内容如对您有帮助,希望把文章链接给更多的朋友!

本文为大家分享了Python创建单例模式的5种常用方法,供大家参考,具体内容如下

所谓单例,是指一个类的实例从始至终只能被创建一次。方法1:如果想使得某个类从始至终最多只有一个实例,使用__new__方法会很简单。Python中类是通过__new__来创建实例的:

结果: banana banana通过__new__方法,将类的实例在创建的时候绑定到类属性_inst上。如果cls._inst为None,说明类还未实例化,实例化并将实例绑定到cls._inst,以后每次实例化的时候都返回第一次实例化创建的实例。注意从Singleton派生子类的时候,不要重载__new__。方法2:有时候我们并不关心生成的实例是否具有同一id,而只关心其状态和行为方式。我们可以允许许多个实例被创建,但所有的实例都共享状态和行为方式:

5种Python单例模式的实现方式(单例 python)

将所有实例的__dict__指向同一个字典,这样实例就共享相同的方法和属性。对任何实例的名字属性的设置,无论是在__init__中修改还是直接修改,所有的实例都会受到影响。不过实例的id是不同的。要保证类实例能共享属性,但不和子类共享,注意使用cls._shared_state,而不是Borg._shared_state。因为实例是不同的id,所以每个实例都可以做字典的key:

结果:如果这种行为不是你想要的,可以为Borg类添加__eq__和__hash__方法,使其更接近于单例模式的行为:

结果:所有的实例都能当一个key使用了。方法3当你编写一个类的时候,某种机制会使用类名字,基类元组,类字典来创建一个类对象。新型类中这种机制默认为type,而且这种机制是可编程的,称为元类__metaclass__ 。

结果: id是相同的。例子中我们构造了一个Singleton元类,并使用__call__方法使其能够模拟函数的行为。构造类A时,将其元类设为Singleton,那么创建类对象A时,行为发生如下:A=Singleton(name,bases,class_dict),A其实为Singleton类的一个实例。创建A的实例时,A()=Singleton(name,bases,class_dict)()=Singleton(name,bases,class_dict).__call__(),这样就将A的所有实例都指向了A的属性_instance上,这种方法与方法1其实是相同的。 方法4python中的模块module在程序中只被加载一次,本身就是单例的。可以直接写一个模块,将你需要的方法和属性,写在模块中当做函数和模块作用域的全局变量即可,根本不需要写类。而且还有一些综合模块和类的优点的方法:

python并不会对sys.modules进行检查以确保他们是模块对象,我们利用这一点将模块绑定向一个类对象,而且以后都会绑定向同一个对象了。将代码存放在single.py中:

ConstError>>> del single.aConstError方法5:最简单的方法:

将名字singleton绑定到实例上,singleton就是它自己类的唯一对象了。

标签: 单例 python

本文链接地址:https://www.jiuchutong.com/biancheng/381267.html 转载请保留说明!

上一篇:python Django模板的使用方法(django forms.py)

下一篇:Python工程师面试题 与Python基础语法相关

  • 银行存单丢失怎么办理取款
  • 变动成本法的计算公式有哪些
  • 非正常损失的进项税额转出公式
  • 固定资产一次性扣除政策文件
  • 偶然所得申报期限
  • 存货造成的损失
  • 普通商户怎么开小票
  • 蓝字发票作废流程视频
  • 应付企业负担的职工社会保险费
  • 制造企业搬运系统设计重组带来新活力
  • 南京房产税2021年
  • 律师事务所收费单据
  • 建筑企业管理部门
  • 增值税的计税公式为
  • 个税系统如何导入之前的记录
  • 什么叫做区分
  • 电脑桌面点击鼠标右键就闪退
  • 对方已经认证的红字发票怎么开
  • 外贸企业出口货物
  • 固定资产的折旧是什么意思
  • 数人侵权行为的类型
  • 电脑桌面图标如何更改自定义图片
  • windows 11任务栏没有网络图标
  • 居民企业境外所得税抵免限额
  • 员工辞退补偿金扣个税吗
  • 富贵竹怎么养才能更旺盛水培生根
  • 苏格兰高地什么意思
  • 货物发生非正常损失为什么要做j进项转出
  • 旅游企业税务筹划
  • winform缓存解决方案
  • 完整的css代码案例
  • 基于matlab的随机森林回归和交叉验证
  • pdf优化器在哪里
  • 微软 大中华区 前副总裁
  • 使用ajax实现页面分页
  • vue环境搭建的几种方法
  • 个人对公付款
  • 设计模式适配器模式代码编写
  • phpcms 用的是什么模板引擎
  • 织梦网站停止使用了还侵权吗
  • 报表怎么报送
  • 民间非营利组织会计制度
  • mysql性能问题
  • 金税盘和报税盘一起用吗
  • 银行承兑汇票背面怎么填写
  • 弥补企业以前年度亏损 顺序
  • 应交税费中应交税金包含个税吗
  • 待清算商户款项分录的摘要是什么
  • 记账凭证背面贴原始凭证图片
  • 服务费税额部分计算公式
  • 非营利医疗机构由谁批准
  • 商品型企业
  • 恢复mysql数据库
  • mysql 5.7.17 winx64安装配置方法图文教程
  • win7登录设置
  • windowssystem32configsystem下载
  • win7系统怎样
  • 微软账号重新登录
  • win10怎么设置图片
  • linux将文本写入文件
  • unity加密解决方案
  • quick cocos2dx lua 网络图片 下载
  • 如何在linux安装软件
  • 简单模拟电路图
  • Cocos2dx3.2 Crazy Tetris update 定时更新 游戏逻辑处理
  • shell脚本while true循环
  • 批处理杀死进程
  • jquery 使用
  • jquery的css样式
  • js展示
  • Android调用jni获取mac地址
  • python 电话号码
  • 开票怎么查发票总额
  • 领导班子和领导干部年度考核
  • 地税局 业务
  • 杭州市税务局举报
  • 江苏优抚对象
  • 微山湖到底属于哪里
  • 牛力扳手怎么用
  • 国税三所电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设