Sobes.tech
Back to questions
Junior — Middle
74

Какие методы используются для реализации шаблона Singleton в коде?

Answer from AI

sobes.tech AI

Шаблон Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.

В Python есть несколько способов реализовать Singleton:

  1. Использование класса с приватным конструктором и статическим методом
class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

# Использование
s1 = Singleton()
s2 = Singleton()
print(s1 is s2)  # True
  1. Использование декоратора
def singleton(cls):
    instances = {}
    def getinstance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return getinstance

@singleton
class MyClass:
    pass

# Использование
obj1 = MyClass()
obj2 = MyClass()
print(obj1 is obj2)  # True
  1. Использование метакласса
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 Singleton(metaclass=SingletonMeta):
    pass

# Использование
s1 = Singleton()
s2 = Singleton()
print(s1 is s2)  # True

Каждый из этих методов обеспечивает создание только одного экземпляра класса.