python单例模式

来源:互联网 发布:java 获取tomcat路径 编辑:程序博客网 时间:2024/06/08 11:09

单例模式是软件开发中一种常用的设计模式,其目的是未来保证系统中一个类只有一个实例。即一个类只有一个对象实例。
使用python实现单例模式有4种方案:
1.使用import
首先编写一个singleton.py的文件

#singleton.pyclass Singleton(object):    def My_singleton():        passmysingleton = Singleton.My_singleton()

使用时候直接import

from singleton import mysingletonclass myclass:    a=1

2.使用装饰器
这个问题在一次面试中被面试官问到了,问什么是装饰器,因为当时用flask比较多,答得就答到路由上了。顾名思义,装饰器就是起装饰作用的。设你新买的毛胚房子是你新写的一个类,如果你嫌弃新买的房子功能不齐全,你就会开始装潢你的房子,给它添加大量的家具与其他设备。而不是在买一个精装房子。装潢的过程就是在添加装饰的过程,在保证原有类不变的i情况下添加需要的功能。

那么如何用装饰器来做单例模式呢?

def singleton(cls ,*agrs , **kwargs):    instance = {}    def getinstance():        if cls not in instance:            instance[cls] = cls(*agrs , **kwargs)        return instance    return getinstance@singletonclass MyClass():    a = 1

3.使用元类
元类是一个很高深的概念,利用元类来做单例模式是这样做的:

class Singleton(type):    _instance = None    def __call__(cls , *args , **kwargs):        if cls not in cls._instance:            cls._instance[cls] = super(Singleton,cls).__call__(*args , **kwargs)        return cls._instance[cls]

4 使用静态类__new__

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

本文在学习python的单例模式之后默写的代码,可能有误,参考的代码地址为

原创粉丝点击