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:
Важно отметить: