位置: 编程技术 - 正文

详解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请求)

  • 出口退税申报系统安装路径
  • 个体工商户的免税政策
  • 向投资者分配的现金股利如何做账
  • 带薪年休假如果当年离职补交的年休假钱需要扣个税嘛
  • 公司取得违约金合法吗
  • 税控系统维护费怎么做会计分录
  • 金税四期对小规模纳税人
  • 酒店收入是以当月入账时间为准吗
  • 缓交的社保费,包括个人部分
  • 应收账款贷方有余额是什么意思
  • 金税盘减免账务处理
  • 中介公司报税怎么操作
  • 商业企业销售的商品遭受损失的赔偿依据
  • 研发机构认定条件
  • 退所得税的分录
  • 定期定额户超过定额怎么报个税
  • 不动产评估需要明确的基本事项包括哪些内容
  • 营改增怎么还有机打发票吗
  • 报税没有报怎么办
  • 个人独资企业没有公司章程吗?
  • 差额开票的会计分录
  • 开发商开临时发票
  • 刷银行卡消费安全吗
  • 处置固定资产按残值还是净值
  • 统计机构收到公开申请()内予以答复
  • 预定机票如何正常退票
  • 1697509419
  • 商品残次品怎样定义
  • 文件校验有什么用
  • 应收账款余额包括预收账款
  • 联想笔记本在bios中怎么把图标和字变大
  • win7系统网络一直转圈,什么都打不开
  • linux中qq怎么添加快捷键启动功能?
  • 原材料和固定资产入账价值的计算
  • 最多人用的操作系统
  • php的file函数
  • 固定资产转让税金怎么算
  • 钢管租赁费如何计算
  • chrome安装教程
  • 时点数和时期数 订单量 库存量点击量
  • 微信小程序解锁安全吗
  • php公众号推送完整示例
  • 增值税纳税申报操作流程
  • gcm文件
  • 标书中组织结构是什么意思
  • mysql性能提升
  • 未达起征点附加税还需要扣税嘛
  • 企业向个人借款合同模板
  • 企业所得税期间费用明细表
  • mysql操作步骤
  • 劳务费发票是个人的吗
  • 误餐补助需要提供发票吗
  • 公司内部食堂招待费账务处理
  • 土地契税税率计算公式
  • 收取加盟费的账户是什么
  • 企业专家咨询费标准
  • 应交所得税科目期末是不是应该没有余额
  • 银行回单中借贷表示什么意思
  • mac上mysql安装
  • 深度解析桂附地黄丸
  • freebsd使用wifi
  • xp系统如何安装软件
  • windows server 2008 r2有哪些特点
  • 微软官方操作系统叫什么
  • xp注册表损坏怎么修复
  • ubuntu20 server
  • centos 常用命令教程
  • win10一堆毛病
  • excel如何制作登录界面代码
  • Android游戏开发实践指南
  • python的步骤
  • cocos2dx怎么用
  • 安卓 图形api
  • 抽奖小程序模板
  • 安卓智能设备指什么
  • python编写一个模块
  • jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
  • 征管法第六十九条
  • 无锡市国税
  • 上饶国资委领导班子成员名单
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设