韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > Python基础教程 > Python中如何使用_new_实现单例模式

Python中如何使用_new_实现单例模式

头像

爱喝马黛茶的安东尼

2019-07-03 11:56:293227浏览 · 0收藏 · 0评论

单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定。

在Python中常见的单例模式有None,这就是一个很典型的设计,通常使用 if xxx is None或者if xxx is not None来比较运算。

Python实现单例模式

代码如下:

class MyClass:
    _instance = None  
    _first_init = False  
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super().__new__(cls)
        return cls._instance
    def __init__(self, var1, var2):
        cls = type(self)
        if not cls._first_init:
            self.var1 = var1
            self.var2 = var2
            cls._first_init = True

如上所示,我创建了一个MyClass的类,定义了两个类变量,第一个是_instance,它负责保存该类创建的实例。第二个是_first_init,它是一个布尔值,保存是否为第一次实例化该类。

相关推荐:《Python视频教程

在__new__方法中(构造函数),判断是否存在_instance这个类变量,如果之前已经实例化了,直接返回。如果是第一次实例化,就会为_instance类变量绑定实例,使用super().__new__(cls)创建实例,即调用父类object.__new__(MyClass)创建实例。

在__init__方法中(初始化函数),我们通过cls=type(self)获取MyClass类,判断是否第一次实例化。如果是第一次实例化,就绑定实例变量。否则什么都不做。

运行效果

我们创建两个实例,来对比

>>> instance1 = MyClass(1, 2)
>>> instance2 = MyClass(7, 5)
>>> id(instance1) == id(instance2)
True
>>> instance2.var1
1

可以看到,这两个实例的内存地址都相同,而且第一次实例化后变量已经固定了,全局不会再改变。

这就是单例模式的实现。

相关推荐:

Python之类方法、__new__方法和__init__方法介绍

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

蜜桃成熟时2| 蜜桃网站| 3DMAX视频成品免费入口| 白丝| 他的大手在秘密花园游走漫画 | 乡村玉米地周婶的小说叫什么名字| 鲁鲁射击免费播放电视剧全部| 成都私人情侣免费看电视剧| 扒开腿挺进肉蒂抽搐喷潮BL| 日本大片又大又好看的PPT| 电影《出轨》免费观看全集| 《从上司到妻子》动画结局| 成品人和精品人的区别在哪里知乎| 灭火宝贝2:决战丛林| 两个男生做酿酿酱酱酱视频| 体验所(HP)笔趣阁在线阅读| 学校教室里可以插自己电脑吗| 《互换人妻HD中字》| 亚洲无线一线二线三线区别| 欧美一区二区| 三个轮换C1个侯门闺房HLH笔趣阁在线阅读免. | 《艾娃》法国| 久碰精品少妇超清A片视频96| 小俊在雪姨身上耕耘小说免费阅读 | 坤坤寒进桃子里在线看歌词| 《妻子的肉体偿还》5| B站暴躁少女CSGO| 情满四合院大结局| 学生妹高清版免费观看电视剧 | 《男医生的特殊治疗》| 灭火宝贝2户外版| 主动把乳头放进男朋友嘴巴里| 轮流享用高岭之花笔趣阁最新章节| 俄罗斯大扔子视频观看| 中文字幕精品无码亚洲字幕一区| 姐姐的闺蜜2字ID高冷霸气| 狂恋你| 《春庭欲晚》| 美丽小蜜桃6荷尔蒙| 我就去色| 兄妹客厅当父母面爱叫啥