位置: 编程技术 - 正文

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

  • 从香港向境外汇款怎么汇
  • 未开票收入退回可以冲税吗
  • 小微企业税收优惠政策2023年房产税
  • 加计扣除进项税账务处理
  • 税控服务费怎么记账
  • 哪些行业不能开具增值税专用发票
  • 管理费用贷方有哪些递减
  • 企业注销其他应付款可以转入未分配利润吗
  • 开业前的其他费用
  • 货已到发票未到跨年怎么做账
  • 注册商标怎么做账
  • 公司对员工的罚款最多可以罚多少
  • 政府补助的失业金发放准时吗
  • 库存商品报废进项转出
  • 递延收益摊销包含哪些
  • 打印机需要计提折旧吗
  • 公司是否可以开电子发票
  • 国税和地税分别占多少
  • 金税盘没票了
  • 上海电商行业怎么样
  • 想要房贷利息抵税怎么办
  • 个税多申报了实发没有这么多,如何处理
  • 税务机关核定征收契税
  • 降低增值税税率对消费者的影响有哪些
  • 高新创投企业所得税税率
  • 短期投资是会计准则吗
  • linux关闭thp
  • 基金收益率
  • 小规模纳税人的专票可以抵税吗
  • 投资收益或亏损影响营业利润吗
  • 成本核算核算要素有哪些
  • Uncaught TypeError: XXX is not a function问题解决方法
  • movie maker是什么软件
  • 仙客来养殖方法和注意事项视频
  • 增值税普通发票怎么开
  • php模式
  • 提取公益金会计科目
  • 怎样把有余额的钱转出来
  • 出差有补贴
  • 准备动作怎么做
  • 季报的利润表本月金额填的是当月数可以吗
  • 扩散分类
  • dpkg deinstall
  • 每年结息一次,到期一次还本是单利
  • mysql中的外键的作用
  • 帝国cms移动端
  • nginx防盗链的作用
  • 免征增值税的货物
  • 农业用肥尽量不选择
  • 税务相关政策的解读
  • 研发费用的范围包括哪些
  • 税控盘的进项税在哪里申报
  • 固定资产办理竣工结算之后的处理方式
  • 进项税额转出是借方科目还是贷方科目
  • 年底存货反映了什么
  • 工会经费计提基数包括奖金吗
  • 如何进行捐款活动
  • 利润相关计算公式是什么
  • 已认证抵扣增值税怎么撤回申报
  • 退回上年度企业所得税
  • 建筑行业预收账款预缴税
  • 管理费用怎么结转到本年利润未分配利润里了
  • 增值税是否计入税金及附加
  • 会计行政法规包括哪些条例?具体说明?
  • 账簿的设置和登记要点
  • sqlserver 查询语句
  • xp系统如何安装
  • ubuntu搜索已安装软件
  • centos操作命令
  • windows 10 build 9888
  • win7开机提示重启怎么办
  • w10运行命令在哪
  • python中字典怎么用
  • nodejs ejs
  • vue中的计算属性forEach函数的使用
  • 如何使用wordpress
  • js对象的常用方法
  • 贵州地税网上申报大厅
  • 《税收实务》
  • 资源税什么时候征收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设