Python单例模式原理与实现方法详解

小鹿同学
小鹿同学
发布时间:2026-10-12| 6人浏览过
原创

本文深入解析Python中单例模式的原理与实现。通过回收站实例说明单例概念,并详细展示两种创建单例的方法:利用__new__确保全局唯一对象,以及结合__init__控制初始化逻辑仅执行一次。文章包含完整代码示例与运行结果分析,帮助开发者掌握单例模式在Python中的实际应用。

本文通过具体实例详细解析Python中单例模式的运作原理及其创建技巧,旨在为读者提供清晰的参考与学习路径。

1. 什么是单例模式

以日常电脑操作系统中的回收站为例,这是一个典型的单例模式应用场景。在整个操作系统运行期间,回收站必须保持唯一的实例存在,所有系统操作均指向这同一个实例,且该实例负责自行生成和管理其自身的实例对象。因此,回收站的设计完美契合了单例模式的定义。

单例模式的核心目标是确保某个类在整个系统中仅存在一个实例,并由该类自行负责创建该实例,同时向整个系统提供访问该实例的接口。作为一种对象创建型设计模式,单例类严格限制了实例的数量。

2. 创建单例:确保系统中仅存在一个对象

# 实例化一个单例
class Singleton(object):
  __instance = None
  def __new__(cls, age, name):
    #如果类数字__instance没有或者没有赋值
    #那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
    #能够知道之前已经创建过对象了,这样就保证了只有1个对象
    if not cls.__instance:
      cls.__instance = object.__new__(cls)
    return cls.__instance
a = Singleton(18, "xxx")
b = Singleton(8, "xxx")
print(id(a))
print(id(b))
a.age = 19 #给a指向的对象添加一个属性
print(b.age)#获取b指向的对象的age属性

代码执行后的输出结果如下:

4391023224 4391023224 19

3. 创建单例:确保__init__方法仅执行一次

# 实例化一个单例
class Singleton(object):
  __instance = None
  __first_init = False
  def __new__(cls, age, name):
    if not cls.__instance:
      cls.__instance = object.__new__(cls)
    return cls.__instance
  def __init__(self, age, name):
    if not self.__first_init:
      self.age = age
      self.name = name
      Singleton.__first_init = True
a = Singleton(18, "xxx")
b = Singleton(8, "xxx")
print(id(a))
print(id(b))
print(a.age)
print(b.age)
a.age = 19
print(b.age)

代码执行后的输出结果如下:

139953926130600 139953926130600 18 18 19

如需进一步了解Python相关知识,可参考本站发布的《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》以及《Python入门与进阶经典教程》等专题内容。

希望上述关于Python程序设计的解析内容能对各位开发者有所帮助。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。