Python 总结之单例模式

单例模式

1.什么是单例模式
确保一个类只有一个实例对象。
2.为什么用单例模式
在日常电脑使用中,往往会用到任务管理器,回收站等等,这些程序在操作系统中就是唯一的。这样就不会让系统中出现多个相同程序导致内存资源的浪费。

实现单例模式的几种方式

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

mysingleton.py

class Singleton(object):
    def foo(self):
        pass
singleton = Singleton()

将上面的代码保存在文件 mysingleton.py 中,要使用时,直接在其他文件中导入此文件中的对象,这个对象即是单例模式的对象

from mysingleton import singleton

2.基于new方法实现(推荐)
我们知道,当我们实例化一个对象时,是先执行了类的new方法(我们没写时,默认调用object.new),实例化对象;然后再执行类的init方法,对这个对象进行初始化,所以我们可以基于这个,实现单例模式

class Singleton(object):
    __instance = None  # 设置一个类属性(只创建一个对象)
    is_first_run = True  # 设置一个类属性(只初始化一次)

    def __new__(cls, age):
        if not cls.__instance:   # 这里对象还没创建所以是cls调用
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, age):
        if self.is_first_run:
            self.age = age
            self.is_first_run = False  # 这里new创建了对象,所以用self

a = Singleton(18)
b = Singleton(20)
print(id(a))
print(id(b))
print(b.age)
print(a.age)

打印结果如下:

140063755106960
140063755106960
18
18
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,285评论 4 34
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,019评论 17 410
  • 参考资料:菜鸟教程之设计模式 设计模式概述 设计模式(Design pattern)代表了最佳的实践,通常被有经验...
    Steven1997阅读 1,199评论 1 12
  • 001 加入读书周的初衷 读书算是目前生活中唯一坚持得还算不错的事,尤其是在去年参加了行动营和读书营之后,即使再忙...
    姚一姚2017阅读 397评论 2 1