python中的单例模式

python中的单例模式有啥作用?

单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例:如果实例不存在,会创建一个实例;如果已存在就会返回这个实例。因为单例是一个类,所以你也可以为其提供相应的操作方法,以便于对这个实例进行管理

这样会大大节省出内存

那么怎么实现一个单例模式呢?

直接用类实现:

class Singleton:
    _instance = False

    def __new__(cls, *args, **kwargs):

        if not cls._instance:
            cls._instance = super().__new__(cls)
            return cls._instance
        else:
            return cls._instance


a = Singleton()
b = Singleton()
print(a)
print(b)

打印的内容是:

<__main__.Singleton object at 0x00B04FB0>
<__main__.Singleton object at 0x00B04FB0>

在上面为什么不用__init__方法呢?因为其实在创建对象的时候,会先去执行__new__方法,将对象返回给__init__的,所以我们直接使用new方法才可以

还有一种直接使用装饰器来实现

def single_ton(cls):
    _instance = {}

    def fun(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
            return _instance[cls]
        else:
            return _instance[cls]

    return fun


@single_ton
class A:
    def __init__(self):
        pass


a = A()
b = A()
print(a)
print(b)

打印结果:

<__main__.A object at 0x02CF4EF0>
<__main__.A object at 0x02CF4EF0>

以上总结是是两种实现单例模式的方法

原文地址:https://www.cnblogs.com/LCboss/p/12625906.html