当前位置:首页>python>小白学python第77天之面向对象中的单例模式

小白学python第77天之面向对象中的单例模式

  • 2026-09-02 20:26:37
小白学python第77天之面向对象中的单例模式

2.22

面向对象中的单例模式

?

学前疑问    

当程序中需要管理一些如配置信息、数据库连接池或日志记录器这类核心组件时,明明希望它们全局唯一——既避免重复创建浪费资源,又防止多个实例导致状态不一致——但却发现,即使小心翼翼,仍有可能在代码的不同角落意外创建出多个实例?

1

面向对象中的单例模式

(1)什么是设计模式

设计模式就是前人根据实际的问题提出的问题解决方案,我们把这种就称之为设计模式。

(2)单例模式

单例模式是一种常见的设计模式!

所谓的设计模式,不是一种新的语法,而是人们在实际的应用中,面对某种特定的情形而设计出来的某种常见的有效的解决方案,所以,设计模式只是经验的总结!

什么又是单例模式?单例,就是单一实例!

在实际的运用中,存在一些类,只需要实例化一个对象,就可以完成其所有的功能操作。所以,如果我们能够通过某些技巧,使得一个类只能开辟一个对象空间的话,这样就可以节省相应的对象资源,这种模式就叫作单例模式!

应用场景:音乐播放器对象、回收站对象、打印机对象

(3)__new__()方法

在Python中,我们目前已经学了3个魔术方法了,分别是__init__()、__str__()、__del__(),接下来介绍一下__new__()方法。

使用类名()创建对象时,Python的解释器首先会调用__new__方法为对象分配空间。

__new__是一个由object积累提供的内置的静态方法,主要作用有两个:

○ 在内存中为对象分配空间

○ 返回对象的引用

Python解析器获得对象的引用后,将引用作为第一个参数,传递给__init__方法重写__new__方法的代码非常固定,一定要使用return super(). __new__(cls),否则Python解释器得不到分配了空间的对象引用,就不会调用对象的初始化方法。

__new__方法是一个静态方法,在调用时,要求将自身类信息cls作为参数传递到这个方法中,这个方法属于object类中的一个静态方法。

案例:

# 定义一个播放器类class MusicPlayer(object):    # 重写__new__()魔术方法    def __new__(cls, *args,48 **kwargs):        print('1、开辟内存空间')        print('2、返回实例对象引用地址')        returnsuper().__new__(cls)    def __init__(self, name):        self.name = name# 1、实例化mp1对象mp1 = MusicPlayer('红色的高跟鞋')print(mp1)# 2、实例化mp2对象mp2 = MusicPlayer('春夏秋冬')print(mp2)

(4)单例模式的代码实现

# 定义一个播放器类class MusicPlayer(object):    instance = None    # 重写__new__()魔术方法    def __new__(cls, *args, **kwargs):        # 判断实例化时有没有分配内存空间        if cls.instance is None:            cls.instance = super().__new__(cls)        return cls.instance    def __init__(self, name):        self.name = name# 1、实例化mp1对象mp1 = MusicPlayer('红色的高跟鞋')print(mp1)# 2、实例化mp2对象mp2 = MusicPlayer('春夏秋冬')print(mp2)

注:类属性在内存中是一个特殊的存在,其不用于以前讲过的局部变量(局部变量当函数执行完毕后,其会被内存所销毁)。但是类属性一旦定义,除非对象以及这个类在内存中被销毁了,否则其不会自动销毁。

今日学习完毕,课后作业: 

数据库连接管理器,题目要求:

请编写一个名为 DatabaseConnection的类,实现单例模式。要求如下:

① 该类只能创建一个实例。

② 如果尝试创建第二个实例,应返回第一个实例,而不是新建一个。

③ 该类有一个 get_connection_info()方法,用于返回一个简单的字符串,例如:"这是数据库连接信息..."。

④ 编写代码验证两个变量指向的是同一个对象。

最新文章

随机文章