国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > 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__方法介绍

关注

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

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

白色变态蕾丝超薄开档连身袜| 老公说我越来越骚的心理| 公憩止痒小说原著叫什么名字| 一天下课几个男生把我拉到 | 《警花交换做爰》| 台湾版《黄花闺女》完整版| 法国巜做爰的禁忌1| 5YY3.CNV7Y7.CC| 边啃奶头一边躁狂会怎么样| 双飞儿媳妇和她闺蜜免费阅读| 乳欲人妻办公室奶水| 丈夫不在家儿媳想老公的背景故事 | 青梅竹马是消防员第一部| 外卖服务3| 韩国咬住奶头的乳三级| 老公把舌头放进我B里搅拌| 巨乳童颜| THICK是什么意思| 国外不堪入目的演唱会| 老牛耕田陈雪全文免费阅读笔趣阁| 《酒店激战》动漫1-5集免费观.. 《好好疼爱里面》日剧动漫 | 亚洲一区| 《黏糊糊的你》免费观看| 欧美大片PPT免费PPT| 灭火宝贝2:决战丛林| 《特殊游泳教练》| 9.1免费漫画网站NBA| 刘老汉的儿媳小雪的背景资料| 动物扌桑辶鬲的| 成都私人情侣免费看电视剧| 鲍鱼| 两人一起做AJ的视频教程 | 日韩暖暖视频免费观看视频| 你睡我老婆我也睡你老婆台词| 第一章破外女初尝云雨| 《熟妇的荡欲》HD中字| 只交不泄的方法| 人狗大战6免费观看正版| 鲁鲁影院免费观看电视剧电影| 老和尚的大东西| 《军舰上的女兵》法国版完整版