Sobes.tech
Junior — Middle
79

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

Компании, где спрашивали
СБЕР Центр ИИСБЕР Центр ИИ

Ответ от нейросети

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 get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@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

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