前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单例模式的理解

单例模式的理解

作者头像
汪凡
发布2018-05-29 14:50:50
5130
发布2018-05-29 14:50:50
举报
文章被收录于专栏:python成长之路
代码语言:javascript
复制
# 首先了解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方法里返回的都是第一个实例化对象
                 # 都指向的第一个实例化的内存地址,所以不管以后实例化多少个对象,都是同一个内存地址里的同一个东西
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档