python单例模式

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

#singleton.py
class Singleton(object):
    def My_singleton():
        pass
mysingleton = Singleton.My_singleton()

使用时候直接import

from singleton import mysingleton
class 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

@singleton
class 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的单例模式之后默写的代码,可能有误,参考的代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值