位置: 编程技术 - 正文

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基础语法相关

  • 税局退个税手续费税率
  • 本月计提所得税费用
  • 增值税未缴款能清卡吗
  • 预授权撤销怎么撤销
  • 中小企业税务管理存在的问题
  • 外单位人员报销差旅费会计分录
  • 发票加盖公章有用吗
  • 一台设备分期开票数量
  • 建筑清包工的账务处理
  • 调价单生成什么科目
  • 项目上发生伙食问题
  • 总账期末余额为零怎么写
  • 企业征地补偿支出需要什么凭据做账?
  • 应付账款不付处理分录如何写?
  • 房地产商品房销售营业税怎么算
  • 小规模纳税人要做账吗
  • 银票和承兑的区别
  • 股东投进来的钱可以放哪个科目
  • 财务杠杆系数简单计算方法
  • 按揭购入固定资产怎么算
  • 什么是保守型证券
  • 盈余公积的提取基数
  • 支付宝花呗服务费收费标准
  • 公积金可以支付二手房首付款吗
  • 黄石国家公园的英语怎么读
  • PHP:diskfreespace()的用法_Filesystem函数
  • 想做酒水批发的生意怎么做?
  • 审核原始凭证应注意
  • php出栈函数
  • 最贵的电脑键盘
  • 基于php技术
  • 国家公园好玩吗
  • 卡特迈国家公园熊吃人
  • 什么是重大会计事务所
  • yii框架安装
  • php对接mysql
  • 净资产收益率的概念
  • 出口的发票怎么开视频
  • phpweb框架
  • 小规模企业做账表格
  • 目标检测论文解析怎么写
  • 面试宝典下载
  • phpcms怎么用
  • java基础介绍
  • 灵动cfe
  • 定额税率举例子
  • 年度利润表与12月利润表区别
  • 销售折扣单独开发票
  • 生产部门包括
  • 小规模纳税人免税政策2022
  • 以无形资产换入固定资产发生的净损益
  • 开票方未缴税,为何要追回付款方的退税款
  • 预存电费和后付费哪个好
  • 上月发票冲红后怎么作废
  • 怎么打印税务登记证明备案表
  • 固定资产怎么做账
  • 预存话费发票能报销吗
  • 投标费用如何入账科目
  • 商业企业的营业成本包括
  • 年末增值税有留底,挂在哪个科目
  • 预交企业所得税税率
  • 工程项目预缴税率
  • 新成立的公司如何申请资质
  • 商品流通企业会计
  • 新买的苹果电脑没有电
  • 电脑xp系统桌面
  • windows推送
  • msng.exe是什么
  • linux和windows的区别?
  • 360修复win7
  • 如何让win8系统变快
  • linux根目录和主目录
  • opengl 实现
  • Node.js中的包管理工具是什么
  • unity3d4个脚本
  • shell监控http脚本
  • 你知道什么是布
  • python 文件操作,读,写,指定位置
  • 国家税务总局咨询热线电话
  • 航天金税软件怎么下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设