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

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

本文深入解析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 相关产品和应用

全部下载

专题列表