当前位置: 首页 > news >正文

关于Python的Object继承

今天在Coding的使用,使用了python的单例模式,发现了一个很有趣的问题。

 

class x(object):

    __se = None
    a = None

    def __new__(cls):
        if cls.__se is None:
            cls.__se = super(x, cls).__new__(cls)
        return cls.__se

    def __init__(self):
        print id(self)

if __name__ == '__main__':
    a = x()
    a.a=1
    b = x()
    print b.a

执行后得出:
4499205328
4499205328
1

单例模式有效!

将第一行的class x(object): 改为class x: , 执行结果为

4467004840
4467004912
None

单例模式无效!

本来以为python类似于Java的模式,所有的类默认都是派生于object类,即object是’根类’。但事实上不是这样。深入了解了一下才发现。继承于object的类,使用了new-style的对象,反之则使用默认的classic对象。这两种对象的明显区别是classic对象在实例化的时候不会调用__new__方法,而是直接调用__init__方法,所以用__new__方法实现的单例模式是无法在classic对象中实现的。

吐槽一句:object方法是python在2.2的时候增加的一个特性,本身就是为了解决这个__new__方法的问题,但在2.7还没有将默认继承调整为object,进度真的很慢。相比来说3.x的进步又实在太快了。

相关文章:

  • centos6.X上安装zabbix-3.0.4和邮件设置
  • djang2.0文档-概述
  • 十步直通深度学习
  • Spider_Man_3 の selenium
  • 前台页面
  • 从零开始写项目第十一篇【个人备忘录】
  • lmdb
  • Mysql主从复制以及常见错误问题分析
  • java基础-集合
  • log4js日志配置问题
  • npx命令介绍
  • 一个Linux青蛙的痛苦挣扎……
  • StackExchange.Redis使用配置
  • CentOS经常使用文件操作命令[百度博客搬家]
  • telegraf+influxdb+grafana开源监控架构
  • 【Leetcode】101. 对称二叉树
  • Angular2开发踩坑系列-生产环境编译
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • export和import的用法总结
  • Git学习与使用心得(1)—— 初始化
  • GraphQL学习过程应该是这样的
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java读取Properties文件的六种方法
  • Lsb图片隐写
  • mysql 数据库四种事务隔离级别
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python十分钟制作属于你自己的个性logo
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 半理解系列--Promise的进化史
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 算法---两个栈实现一个队列
  • 听说你叫Java(二)–Servlet请求
  • 写代码的正确姿势
  • 一、python与pycharm的安装
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • - 转 Ext2.0 form使用实例
  • 《天龙八部3D》Unity技术方案揭秘
  • ​Java并发新构件之Exchanger
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​什么是bug?bug的源头在哪里?
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (C#)获取字符编码的类
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (rabbitmq的高级特性)消息可靠性
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Net Core和.Net Standard直观理解
  • .NET DataGridView数据绑定说明
  • .net的socket示例
  • .NET关于 跳过SSL中遇到的问题
  • .net经典笔试题
  • .NET开源快速、强大、免费的电子表格组件