首页常见问题正文

写一个Python中单例模式

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

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, value):
        self.value = value

# 使用示例
obj1 = MyClass(1)
obj2 = MyClass(2)

print(obj1 is obj2)  # 输出: True
print(obj1.value)    # 输出: 1
print(obj2.value)    # 输出: 1

  这里的singleton装饰器会包装类的实例化过程,确保在同一个类的不同实例请求时返回同一个实例。

  另一种常见的方式是使用元类来实现单例模式,如下所示:

class SingletonMeta(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class MyClass(metaclass=SingletonMeta):
    def __init__(self, value):
        self.value = value

# 使用示例
obj1 = MyClass(1)
obj2 = MyClass(2)

print(obj1 is obj2)  # 输出: True
print(obj1.value)    # 输出: 1
print(obj2.value)    # 输出: 1

  这里的SingletonMeta元类在创建类时会修改类的行为,确保在同一个类的不同实例请求时返回同一个实例。

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