首页常见问题正文

如何在Python中实现单例模式?

更新时间:2024-04-15 来源:黑马程序员 浏览量:

IT培训班

  在Python中实现单例模式有几种不同的方法,下面我将介绍其中的两种常见方法:使用装饰器和使用类。

  方法一:使用装饰器

def singleton(cls):
    instances = {}

    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return get_instance

@singleton
class MyClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

  在这个方法中,我们定义了一个装饰器singleton,它接受一个类作为参数,并返回一个内部函数 get_instance。当我们使用@singleton装饰器来修饰某个类时,实际上是将这个类传递给singleton函数,然后返回一个包装了原始类实例化过程的函数get_instance。这个函数会检查该类是否已经被实例化,如果是,则返回已经存在的实例,否则创建一个新实例并返回。

  方法二:使用类

class Singleton:
    _instance = None

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

class MyClass(Singleton):
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

  在这个方法中,我们定义了一个基类Singleton,它实现了__new__方法。当我们继承Singleton类时,子类将会共享同一个类级别的_instance实例变量。每次子类被实例化时,__new__方法会检查是否已经存在实例,如果不存在,则创建一个新实例;如果已经存在,则返回已有的实例。

  以上两种方法都能够实现单例模式,我们可以根据自己的喜好和项目的需求选择其中一种来使用。

分享到:
在线咨询 我要报名
和我们在线交谈!