更新时间:2024-03-28 来源:黑马程序员 浏览量:
单例模式是一种设计模式,确保类只有一个实例,并提供全局访问点。在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元类在创建类时会修改类的行为,确保在同一个类的不同实例请求时返回同一个实例。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业当天offer率91%,薪资1W+占比54.2%,班级均薪12k+
2025-09-19