码迷,mamicode.com
首页 > 编程语言 > 详细

python中的单例模式

时间:2020-04-03 13:52:10      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:实现   对象   war   object   style   不同   返回   执行   单例模式   

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>

 

 

 

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

python中的单例模式

标签:实现   对象   war   object   style   不同   返回   执行   单例模式   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!