def singleton(cls):
instance = None
def wrapper(*args, **kwargs):
nonlocal instance
if instance is None:
instance = cls(*args, **kwargs)
return instance
return wrapper
@singleton
class MyClass:
pass
Реализовать паттерн Singleton с помощью декоратора в Python можно следующим образом:
def singleton(cls):
"""Декоратор для реализации паттерна Singleton."""
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class MySingleton:
def __init__(self, value):
self.value = value
def get_value(self):
return self.value
# Пример использования
singleton1 = MySingleton(10)
singleton2 = MySingleton(20)
print(singleton1.get_value()) # Выведет 10
print(singleton2.get_value()) # Выведет 10 (тот же самый экземпляр)
print(singleton1 is singleton2) # Выведет True
Разберем код:
Преимущества использования декоратора для Singleton:
Важно отметить: