Python单例模式原理与实现方法详解
本文深入解析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程序设计的解析内容能对各位开发者有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













