Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元组类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python高级编程

第二十章: Python项目实战

首页 > Python基础教程 > 第十七章: Python异常处理 > 17.4节: 程序实战-单例模式

17.4节: 程序实战-单例模式

薯条老师 2022-12-08 11:08:39 22717 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

17.4.1 何为单例模式?

单例模式是指一个类只对应一个实例,通过类的全局方法来访问该实例。使用单例模式可以节约系统资源(时间+空间),避免对共享资源的重复占用,提升系统性能。在下节程序实战中,我们会封装一个操作MySQL数据库的类,届时会使用到单例模式。

17.4.2 模式的适用场景

在仅需一个实例对象就能实现需求的场景中,就应该使用单例模式,比如MySQL, Redis等数据库的连接对象,全局的计数器对象。单例模式的实现方式有饿汉式和懒汉式。饿汉式线程安全,在类加载时即被创建。懒汉式仅在需要的时候才被创建,会有线程安全的问题。

17.4.3 饿汉与懒汉

现在通过单例模式来实现一个全局的计数器对象Counter, 以下为饿汉模式的单例:

# __author__ = 薯条老师,微信公众号:薯条编程

"""
单例模式是指一个类只对应一个实例,通过类的全局方法来访问该实例
"""


"""
(1) 定义一个全局的计数器对象Counter,以饿汉模式中的单例来实现
"""


class Counter:
    __instance = None
    """
    (2) 重写__new__方法来实现饿汉模式的单例  
    """

    def __new__(cls):
        if not cls.__instance:
            cls.__instance = super().__new__(cls)
        return cls.__instance

    def __init__(self):
        self._count = 0 if "_count" not in self.__dict__ else self.__dict__["_count"]

    @property
    def count(self):
        return self._count

    @count.setter
    def count(self, value):
        self._count += value


if __name__ == "__main__":
    counter = Counter()
    counter.count = 1
    counter = Counter()
    counter.count = 1
    # 输出的结果为2,说明为同一个对象
    print(counter.count)

以下为懒汉模式的单例:

# __author__ = 薯条老师,微信公众号:薯条编程

"""
单例模式是指一个类只对应一个实例,通过类的全局方法来访问该实例
"""

"""
(1) 定义一个全局的计数器对象Counter,以懒汉模式中的单例来实现
"""


class Counter:
    __instance = None
    """
    (2) 通过类方法来实现懒汉模式中的单例  
    """
    @classmethod
    def get_instance(cls):
        if not cls.__instance:
            cls.__instance = cls()
        return cls.__instance

    def __init__(self):
        self.__count = 0

    @property
    def count(self):
        return self.__count

    @count.setter
    def count(self, value):
        self.__count += value


if __name__ == "__main__":
    counter = Counter.get_instance()
    counter.count = 1
    counter = Counter.get_instance()
    counter.count = 1
    print(counter.count)

17.4.4 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:



欢迎 发表评论: