博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Python的Object继承
阅读量:6112 次
发布时间:2019-06-21

本文共 756 字,大约阅读时间需要 2 分钟。

今天在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的进步又实在太快了。

转载地址:http://dxcka.baihongyu.com/

你可能感兴趣的文章
Linux下python升级步骤
查看>>
EBS 发运管理操作实例9——发运例外处理(Ship Exceptions)
查看>>
一键去除 UC浏览器 论坛模式 内置的广告
查看>>
谈谈个人关于程序开发中,“零配置”和“有配置”的看法
查看>>
Go fmt包
查看>>
Java邮件开发-----java邮件开发(一)
查看>>
常用自动化测试工具介绍(支持B/S、C/S)
查看>>
java加密解密用法
查看>>
jsp 下载
查看>>
【ASP.NET Web API教程】5.4 ASP.NET Web API批处理器
查看>>
带下划线的LABEL控件
查看>>
CentOS上安装软件错误提示:configure: error: no acceptable C compiler found in $PATH
查看>>
【SAS NOTE】MEANS
查看>>
幸福框架:研发团队
查看>>
NSThread 的创建和使用
查看>>
对未登陆的用户进行处理的页面
查看>>
Ext Js简单Data Store创建及使用
查看>>
uva11130
查看>>
warning: name lookup of `i' changed
查看>>
[Hadoop源码详解]之一MapReduce篇之InputFormat
查看>>