python实现单例模式

Posted NoYone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现单例模式相关的知识,希望对你有一定的参考价值。

有这么一种场景,我们把数据封装到类体或类的某个方法里,然而我们new出这个类只是为了拿到这部分数据,那么当多次这样调用的时候,每次都来拿数据并放到内存中大大浪费了内存。

那我们就可以想,我们拿到一次数据以后,把它放到内存里,下次要用同样的时候做个判断,如果内存里有,那么就不用再取了。

这个时候就要设计一种“单实例模式”。

方法1:

class Foo(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        """
        单例模式
        :param cls:
        :param args:
        :param kwargs:
        :return:
        """
        # 注意此处的判断,当cls.__instance为None时,才去真正的new,否则直接返回。
        if not cls.__instance:
            obj = object.__new__(cls, *args, **kwargs)
            cls.__instance = obj
        return cls.__instance

object = Foo() # 先调用__new__,再调用__init__,__init__就类似于构造器。

在此也要补充一下,python创造类的实例,其实和java一样,都叫new出来的,只不过Python是将这个new方法写成内置的了(__new__),那我们也可以知道,当写object = Foo()时,先调的__new__,再调的__init__。

方法二:

class Foo(object):
    instance = None

    def __init__(self):
        self.name = haha
# 其实和方法一的一个道理,建议用方法一。 @classmethod def get_instance(cls): if Foo.instance: return Foo.instance else: Foo.instance = Foo() return Foo.instance def process(self): return 123

 




以上是关于python实现单例模式的主要内容,如果未能解决你的问题,请参考以下文章

Python如何实现单例模式

常见设计模式 (python代码实现)

深刻理解Python中的元类(metaclass)以及元类实现单例模式

Java单例模式

Python实现单例模式

一日一技:Python 下面最简单的单例模式写法