Python 单例模式解析复杂数组返回不同的值

单例模式是一种创建型设计模式,它的目的是保证一个类只有一个实例,并提供一个全局访问点。

单例模式的实现原理包括以下几个关键步骤:

  1. 将类的构造函数私有化,这样其他地方就无法直接通过 new 操作符来创建该类的实例。

  2. 在类的内部定义一个私有静态成员变量,用于存储该类的唯一实例。

  3. 提供一个公共的静态方法,用于获取该类的实例。在这个方法中,首先判断静态成员变量是否为空,如果为空,则创建一个新的实例并赋值给静态成员变量,然后返回该实例;如果静态成员变量不为空,则直接返回该实例。

通过上述步骤,就实现了单例模式的核心原理。在使用单例模式的时候,其他地方只能通过公共静态方法来获取该类的实例,保证了全局只有一个实例存在。

单例模式的实现方式有多种,其中比较常见的有饿汉式和懒汉式。

饿汉式是在类加载时就创建实例并赋值给静态成员变量,保证了实例的唯一性,但可能会造成资源的浪费。

懒汉式是在第一次调用获取实例的方法时才创建实例,避免了资源的浪费,但需要考虑线程安全性的问题。

除了以上两种方式,还可以使用双重检查锁定、静态内部类等方式实现单例模式,具体选择哪种方式要根据实际的需求和场景来决定。

在 Python 中,可以通过使用类的属性来实现单例模式。单例模式指的是在整个程序中只有一个实例对象。

以下是一个解析复杂数组并返回不同值的单例模式示例代码:

python 复制代码
class Parser:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super().__new__(cls)
        return cls._instance

    def parse(self, array):
        result = []
        for item in array:
            if isinstance(item, list):
                result.extend(self.parse(item))
            else:
                result.append(item)
        return result

# 示例使用
array = [1, 2, [3, 4, [5, 6], 7], 8]
parser = Parser()
output = parser.parse(array)
print(output)

在上面的代码中,Parser 类实现了单例模式。_instance 是一个类属性,初始化为 None。在 __new__ 方法中,首先检查 _instance 是否为 None,如果是,则创建一个新的实例对象,并将 _instance 设置为这个新对象。如果不是 None,则直接返回 _instance

parse 方法是解析复杂数组的递归函数。对于传入的数组,遍历每个元素,如果是一个子数组,递归调用 parse 方法,并将结果合并到 result 数组中。如果是一个单个的元素,直接将其添加到 result 数组中。最后返回 result 数组。

在示例使用中,首先创建一个 Parser 对象 parser,然后调用 parser.parse 方法传入复杂数组 array。最后打印输出结果。

由于单例模式的特性,即使创建多个 Parser 对象,它们都是同一个实例。因此,无论创建多少个 Parser 对象并调用 parse 方法,都会返回相同的结果。

相关推荐
yaodong5182 小时前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
BU摆烂会噶2 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
消失的旧时光-19433 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
zhaoyong2224 小时前
MySQL 存储过程中字符集与排序规则不匹配导致查询性能下降的解决方案
jvm·数据库·python
sinat_383437364 小时前
golang如何从Python转型Go开发_golang从Python转型Go开发攻略
jvm·数据库·python
rockey6275 小时前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
gqk015 小时前
Python入门
python
Muyuan19985 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
代码小书生6 小时前
statistics,一个统计的 Python 库!
开发语言·python
STLearner6 小时前
SIGIR 2026 | LLM × Graph论文总结(图增强LLM,GraphRAG,Agent,多模态,知识图谱,搜索,推
人工智能·python·深度学习·神经网络·机器学习·数据挖掘·知识图谱