博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式的理解
阅读量:5786 次
发布时间:2019-06-18

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

# 首先了解object类实例化对象时候使用new的时候发生了什么# class Person():#     def __init__(self):#         print('这是init方法')### a = Person()     # 不重写object的new方法不采用单例化模式的时候,则每实例化一个对象# b = Person()     # object的new方法会创建一块内存地址去存储这个实例化对象# print(id(a))     # 所以每个实例化对象的内存地址都是不一样的,分别会调用init初始化方法,初始化# print(id(b))# 其次在子类中重写new方法class Person(object):    zheshibenshen = None    def __new__(cls):        if cls.zheshibenshen == None:            cls.zheshibenshen = super().__new__(cls)        return cls.zheshibenshen    def __init__(self):        print('这是init方法')a = Person()     # 这里重写了父类object的new方法,使这个类每次实例化对象的时候总是返回zheshibenshen(即它自己)b = Person()     # 第一次实例化时,这里就是重新调用object的new方法,创建一个内存地址存放实例对象                 # 不重写new,object也会执行super().__new__(Person)这个方法,创建一个内存地址存放实例print(id(a))     # 然后再把它赋值给zheshibenshen然后返回它,它们其实就是这个类第一次实例化时的对象# # 到这里为止跟不重写new方法时的过程是一样的,重点是后面这个类再去实例化对象的时候# # 也就是说以后再实例化对象的时候,每次new都会判断这个实例化的对象,它自己是不是空,不是空就返回它自己print(id(b))     # 所以每次实例化对象的时候,(重写后)每次new方法里返回的都是第一个实例化对象                 # 都指向的第一个实例化的内存地址,所以不管以后实例化多少个对象,都是同一个内存地址里的同一个东西

  

                                                                   -------  知识无价,汗水有情,如需搬运请注明出处,谢谢!

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

你可能感兴趣的文章
彻底搞清楚javascript中的require、import和export
查看>>
几款硬盘接口的速度测试
查看>>
新书《Ext JS 4.2 实战》终于出炉了
查看>>
记录一次奇葩的sleep(15)引起的Too many connections
查看>>
桌面虚拟化之PCoIP访问协议硬卡介绍
查看>>
Full-Mesh 帧中继
查看>>
配置普通,长得丑,OPPO R11凸显OPPO创新乏力
查看>>
选择更安全的方式注册你的puppet节点
查看>>
实例讲解hadoop中的map/reduce查询(python语言实现)
查看>>
Oracle 并行原理与示例总结
查看>>
saltstack event配合websocket客户端实时推送结果
查看>>
C#_获取 SQL服务器列表
查看>>
[python]pyramid 学习4 (views)
查看>>
SELinux 基础命令
查看>>
[原]C++头文件的包含顺序研究
查看>>
CoView unit test tools
查看>>
delphi listbox 使用
查看>>
FreeSwitch通过远程接口验证用户登录
查看>>
第三回 基类中的方法,应该根据实际情况,虚的虚,抽象的抽象!
查看>>
ProcessOnLoading
查看>>