前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python中的单例模式有几种实现方式?

Python中的单例模式有几种实现方式?

作者头像
程序员小猿
发布于 2021-01-19 02:19:35
发布于 2021-01-19 02:19:35
53500
代码可运行
举报
文章被收录于专栏:程序IT圈程序IT圈
运行总次数:0
代码可运行

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:Python中的单例模式有几种实现方式?

答:单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。在 Python 中,你可以想出几种种方法来实现单例模式呢?笔试题中,手写单例模式,也是经常碰到的,所以都要掌握下!

1、使用模块实现

Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#test1.py
class Singleton(object):
    def foo(self):
        pass
singleton = Singleton()

#test2.py
from test1 import singleton

2、用__new__特殊方法实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Singleton:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(Singleton, cls).__new__(cls)
        return cls._instance
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True
3、使用装饰器实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def singleton(cls):
    _instance = {}
    def inner(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls]
    return inner
@singleton
class Singleton:
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True
4、类装饰器实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Singleton:
    def __init__(self, cls):
        self._cls = cls
        self._instance = {}

    def __call__(self, *args):
        if self._cls not in self._instance:
            self._instance[self._cls] = self._cls(*args)
        return self._instance[self._cls]
@Singleton
class Singleton:
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True
5、使用元类实现方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Singleton1(type):
    def __init__(self, *args, **kwargs):
        self.__instance = None
        super(Singleton1, self).__init__(*args, **kwargs)

    def __call__(self, *args, **kwargs):
        if self.__instance is None:
            self.__instance = super(Singleton1, self).__call__(*args, **kwargs)
        return self.__instance

class Singleton(metaclass=Singleton1):
    def __init__(self, name):
        self.name = name
s1 = Singleton('IT圈')
s2= Singleton('程序IT圈')
print(s1 == s2) # True

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python中的单例模式的几种实现方式的及优化
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,
用户1214487
2018/01/24
1.2K0
单利模式的四种方式
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124468.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/21
3460
全网最实用 Python 面试题大全(花费了整整 3 天时间整理出来的)
花费了整整3天时间整理出来的全网最实用Python面试题大全,一共30道题目+答案的纯干货,如此的辛勤整理,希望大家多多支持,建议点赞+收藏!
Python小二
2020/09/24
9920
全网最实用 Python 面试题大全(花费了整整 3 天时间整理出来的)
Python单例模式
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120211.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/14
2860
【Python之理解__new__和__init__的区别】
在 Python 的丰富工具箱中,_new 和 init 是两个看似相似却又截然不同的概念。这两个方法在对象的创建和初始化过程中扮演着关键的角色,理解它们之间的区别对于深入掌握 Python 的面向对象编程至关重要。从表面上看,它们都与对象的构建有关,但它们的职责和执行时机却有着根本性的不同。在本文中,我们将深入剖析 new 和 init,揭示它们各自的独特之处,带你走进 Python 对象创建的内部机制。
老虎也淘气
2024/01/30
4060
Python设计模式——单例模式
一、单例模式理论 单例模式:    保证某一个类只有一个实例,而且在全局只有一个访问点 优点:    1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间    2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用    3、单例可长驻内存,减少系统开销 缺点:    1、单例模式的扩展是比较困难的    2、赋予了单例模式太多的职责,某种程度上违反了单一职责原则(六大设计原则之一)    3、单例模式是并发协作软件模块中需要最先完成的,因而其不利于测试  
py3study
2020/01/08
3980
python实现单例模式的5种方法
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
Tim在路上
2020/08/04
6.3K0
python设计模式-单例模式
从代码可以看出,他们加入了多种判断,以防止不好的事情发生。如果同时存在两个ChocolateBoiler实例,那这么多判断岂不是失去作用了。那我们改如何实现这个需求呢?这个问题的核心是,我们要先判断实例是不是已经存在,如果存在就不再创建。
goodspeed
2020/12/22
5540
python 魔术方法(二) 对象的创建与单例模式的实现
上一篇文章中,我们详细介绍了 Python 中的几个最常用的魔术方法。 python 魔术方法(一) 自定义容器类与类属性控制
用户3147702
2022/06/27
4060
python 魔术方法(二) 对象的创建与单例模式的实现
Python 实现单例模式
在面向对象编程中,通过单例模式只能创建一个类实例,也就是一个类永远只有一个实例对象。
Python碎片公众号
2021/02/26
2.2K0
Python 实现单例模式
20·Python基础-单例模式四种实现方式
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
2470
20·Python基础-单例模式四种实现方式
python单例模式你搞懂了么?我是终于懂了~
单例模式的作用就是确保某一个类只有一个实例存在,减少多次调用实体类造成的资源浪费。
小雯子打豆豆
2020/06/19
2.3K0
Python学习笔记:单例模式
单例模式:一个类无论实例化多少次,返回的都是同一个实例,例如:a1=A(), a2=A(), a3=A(),a1、a2和a3其实都是同一个对象,即print(a1 is a2)和print(a2 is a3)都会打印True。
py3study
2020/01/19
5580
java和python单例模式的10种写法
懒汉模式(线程不安全)javaCopy codepublic class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instanc
疯狂的KK
2023/03/18
3270
【python设计模式-创建型】单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
西西嘛呦
2020/08/26
3870
【python设计模式-创建型】单例模式
Python单例模式(Singleton)的N种实现
很多初学者喜欢用全局变量,因为这比函数的参数传来传去更容易让人理解。确实在很多场景下用全局变量很方便。不过如果代码规模增大,并且有多个文件的时候,全局变量就会变得比较混乱。你可能不知道在哪个文件中定义了相同类型甚至重名的全局变量,也不知道这个变量在程序的某个地方被做了怎样的操作。
Crossin先生
2018/07/24
5970
Python设计模式之单例模式
  本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的问题? 是什么?通过Python语言来去实现这个设计模式,用于解决为什么中提到的问题。 怎么用?理解了为什么我们也就基本了解了什么情况下使用这个模式,不过在这里还是会细化使用场景,阐述模式的局限和优缺点。   这一篇我们先来看看单例模式。单例模式是设计模式中逻辑最简单,最容易理解的一个模式,简单到只需要一句
Jetpropelledsnake21
2018/05/03
1.1K0
单例模式告诉你只能娶一个老婆
单例(Singleton)模式,应该是设计模式里面最好理解的一个模式之一。使用它,就是为了保证全局环境下只能有一个该类的实例。
Python编程与实战
2020/03/04
4430
单例模式告诉你只能娶一个老婆
python的单例模式
所谓单例,就是保证一个类仅有一个实例。所有引用(实例、对象)拥有相同的状态(属性)和行为(方法);
py3study
2020/01/08
7020
单例模式的四种实现方法
Python的模块其实就是单例的,只会import一次,在模块中定义的全局变量就是单例的。
才浅Coding攻略
2022/12/12
2400
相关推荐
Python中的单例模式的几种实现方式的及优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档