位置: 编程技术 - 正文

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

  • 怎么在电子税务局添加银行账户
  • 利润表的上期金额是指全年吗
  • 普通发票专用发票每张最高限额
  • 开票不确认收入可以吗
  • 建筑劳务属于什么税收分类
  • 售后维修的配件开维修费
  • 个体户不足征是否要交房产税
  • 社保如何会计处理
  • 不动产在建工程是什么意思
  • 企业食堂买东西怎么入账
  • 购买电脑配件的网址
  • 哪些罚款不能进行所得税税前扣除?
  • 股权转让 分期付款
  • 建筑企业一般纳税人提供建筑服务属于老项目
  • 朋友借资质汇款到公司要收税吗?
  • 转出未交增值税怎么算
  • 小规模收到增值税专用发票咋处理
  • 消防改造费用
  • 技术调试费用开几个点税
  • 外包食堂需要什么资质
  • 高速公路过路费税率是多少
  • 合同资产和工程存货的区别
  • 银行中间业务能开具增值税专票吗
  • 500人的公司财务部几人
  • 广告业的其他应收款包括哪些?
  • 苹果se和华为p9哪个好
  • 主营业务收到的现金
  • 合伙企业利润分配个人所得税
  • 对方开红票需要寄给我吗
  • 房屋租赁收入确认条件新准则
  • 开了红字发票销售方怎么账务处理?
  • 如何设置让电脑运行更快
  • php如何解决异常处理
  • 事业单位投资收回账务处理
  • Win10 21H1 Build 19043.1200(KB5005101)预览版更新了哪些内容(附更新日志)
  • antvl7
  • 应收账款和应付账款的管理
  • 美国布莱斯大峡谷成因
  • 当年盈余资金计算公式
  • 小规模纳税人应纳增值税额的计算
  • 农业经营许可证范围
  • Android 10.0 framework中关于Activitity的生命周期的源码讲解
  • 什么是CHATGPT
  • 所得税申报怎么弥补以前年度亏损
  • 对公账户怎么打印
  • 自然人三方协议支付宝怎么处理
  • php页面出不来
  • vue3.0用法
  • python numpy 删除元素
  • php增删改查语句
  • 其他应收款专项审计报告
  • 电脑管理费用入什么账户
  • 新公司成立后税务方面有哪些流程2023
  • 固定资产管理台账
  • 分公司和总公司的税务核算
  • 每月随工资扣的房费缴纳个税吗怎么算
  • 差额开票和全额开票
  • 购买原材料的支出
  • 员工为公司垫费合法吗
  • 有限合伙企业的
  • 老板垫付货款
  • 办理房产证的时候可以加孩子的名字吗
  • 分公司第二季度总结报告
  • 数据库服务器配置方案
  • 播放winner
  • window英语
  • win7旗舰系统
  • Ubuntu 14.10 “Utopic Unicorn”正式发布(附下载)
  • win7系统卸载360
  • win8.1快速启动
  • win7不能玩dnf
  • quick cocos UIListView之isItemInViewRect方法修正
  • canvas动态绘制简单gif
  • Unity3D游戏开发引擎
  • 注册表危险组件怎么安装
  • jquery设置图片大小
  • android中常用的adapter不包括
  • each和each
  • jquery 购物车
  • 外贸出口退税增值税结转每月
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设