位置: 编程技术 - 正文

详解python单例模式与metaclass(python单子)

编辑:rootadmin

推荐整理分享详解python单例模式与metaclass(python单子),希望有所帮助,仅作参考,欢迎阅读内容。

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

单例模式的实现方式

将类实例绑定到类变量上

但是子类在继承后可以重写__new__以失去单例特性

使用装饰器实现

问题是这样装饰以后返回的不是类而是函数,当然你可以singleton里定义一个类来解决问题,但这样就显得很麻烦了

使用__metaclass__,这个方式最推荐

metaclass

详解python单例模式与metaclass(python单子)

元类就是用来创建类的东西,可以简单把元类称为“类工厂”,类是元类的实例。type就是Python的内建元类,type也是自己的元类,任何一个类

python在创建类MyClass的过程中,会在类的定义中寻找__metaclass__,如果存在则用其创建类MyClass,否则使用内建的type来创建类。对于类有继承的情况,如果当前类没有找到,会继续在父类中寻找__metaclass__,直到所有父类中都没有找到才使用type创建类。如果模块里有__metaclass__的全局变量的话,其中的类都将以其为元类,亲自试了,没这个作用,无任何影响

查看type的定义,

type(object) -> the object's typetype(name, bases, dict) -> a new type

所以利用type定义一个类的元类,可以用函数返回一个上面第二种定义的对象,也可以继承type并重写其中的方法。

直接使用type生成的对象作为元类,函数作用是使属性变为大写

上一节中,单例模式元类实现用的是类继承方式,而对于第一种__new__的方式,本质上调用的是type.__new__,不过使用super能使继承更清晰一些并避免一些问题

这里简单说明一下,__new__是在__init__前调用的方法,会创建对象并返回,而__init__则是用传入的参数将对象初始化。看一下type中这两者以及__call__的实现

前面提到类相当于元类的实例化,再联系创建单例模式时使用的函数,用的是__call__,其实用三种magic method中任何一种都是可以的,来看一下使用元类时各方法的调用情况

结果

元类的__init__和__new__只在创建类Foo调用了一次,而创建Foo的实例时,每次都会调用元类的__call__方法

标签: python单子

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

上一篇:Python工程师面试题 与Python Web相关

下一篇:python实现发送和获取手机短信验证码(python如何发送http请求)

  • 开办期间的财务会计制度
  • 计提贷款利息是什么意思
  • 现金日记账支出和收入表格怎么做
  • 特许权使用费计算公式
  • 公司收承兑贴现的会计分录
  • 长期股权投资的账务处理
  • 下列应税项目中,不按次计算征收个人所得税的是
  • 背书转让的电子承兑汇票开收据还是发票
  • 车的违章处理
  • 购买股票如果公司亏损
  • 银行定期存款转存
  • 公司注销后虚开发票
  • 高速公路通行费电子发票怎么打印
  • 选择纳税人身份考虑的因素
  • 纳税等级信息查询
  • 补缴以前年度的印花税账务处理
  • 先收钱后开票怎么做分录
  • 老板垫付的货款怎么做凭证?
  • mac系统如何切换大小写
  • windows10如何设置输入法
  • 本月未认证的怎么处理
  • 环评费入账的会计分录是什么啊
  • 如何界定企业的收益
  • 股东分红个税怎么做账
  • 企业向银行申请办理非原路的服务贸易退汇,银行应当
  • 最好卖的游戏机排行榜
  • 冰河湖怎么去
  • 专业初审
  • 物业公司购买空调合法吗
  • 中兴网管操作手册
  • 多模态特征融合pytorch
  • 进项税额转出结转会计分录怎么写
  • 补交之前年度税款怎么调账
  • 企业自建房出售给员工个人后还需要缴纳土地使用税么
  • 收到的发票税收怎么处理
  • 企业的净利润率
  • 增值税调整怎么结算
  • 房地产城建税计税依据
  • 自查补税怎么做账
  • 开票项目与实际不符合
  • 外贸企业出口退税流程(详细步骤)
  • 新会计准则其他收益核算内容
  • 商品损耗科目
  • 3%减按2%征收增值税是什么意思
  • 出口退税企业退税流程
  • 装修费摊销会计准则
  • 房地产成本的概念
  • 需要分摊的费用怎么做账
  • 公司返聘退休人员的员工比例有没有规定
  • 什么情况下可以安排待岗
  • 资产减值损失包含
  • MSSQL 2005/2008 日志压缩清理方法小结
  • sql server如何
  • UNIX系统中文件的索引表结构
  • appcrash是什么文件
  • 下载win10 32位
  • winxp系统怎么连接网络
  • windows server 2003 sp3
  • windrv.exe
  • mcshield.exe是什么进程
  • linux free 命令
  • win8.0下载
  • linuxat命令的用法
  • js 列表
  • 每天看30分钟手机可以吗
  • javascript 二维码
  • linux反弹shell方法
  • 安卓中textview
  • Nodejs之http的表单提交
  • windows,linux
  • Python连接MySQL并使用fetchall()方法过滤特殊字符
  • 归并代码
  • 稽查查补税款享受增值税免税优惠吗
  • 税控盘离线开票时间怎么查
  • 财税专家刘杨简历
  • 缴纳了车辆购置税能退吗
  • 广西纳税申报流程
  • 业务竞赛经验分享
  • 辽宁房产税征收标准
  • 增值税纳税申报表附列资料(三)
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设