更新时间: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鸿蒙原生智能正式版课程,培养全端跨平台鸿蒙工程师
2026-03-10AI鸿蒙原生智能正式版课程,培养全端跨平台鸿蒙工程师
2026-03-10毕业16个工作日,平均薪资13180元,就业率100%,广州黑马AI智能应用开发(Java)学科20250529班
2026-03-06毕业32个工作日,平均薪资11147元,就业率95%,广州黑马AI智能应用开发(Java)学科20250326班
2026-03-05黑马程序员2025全国就业数据发布:全学科平均就业率92.07%,AI开发类就业平均薪资达11869.67元。
2026-03-05黑马全国校区齐开班!场面太太太壮观了!
2026-03-03