Singleton Python: реализация и применение
Singleton (одиночка) в Python - это паттерн проектирования, который гарантирует, что у класса будет только один экземпляр, и предоставляет глобальную точку доступа для этого экземпляра.
Одиночка используется, когда нужно создать только один объект, который будет обслуживать все запросы. Например, для создания логирования, кеширования, подключения к базе данных и т.д.
В Python можно создать singleton, используя механизм декораторов. Декоратор - это функция, которая принимает функцию и возвращает новую функцию, обычно обертывающую первую функцию.
Пример кода для создания singleton класса с использованием декоратора:
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:
pass
Этот код создает декоратор `singleton`, который принимает класс `cls`. Внутри декоратора есть словарь `instances`, который хранит экземпляры класса.
Далее, создается функция `get_instance`, которая проверяет, есть ли уже экземпляр класса в словаре `instances`. Если нет, то создается новый экземпляр.
Далее, декоратор `singleton` возвращает `get_instance`, обернутый вокруг исходного класса `MyClass`. Таким образом, теперь создание экземпляра `MyClass` будет происходить только один раз, и при последующих вызовах будет возвращаться тот же экземпляр.
Пример использования singleton класса:
python
a = MyClass()
b = MyClass()
print(a is b) # True
Здесь создается два экземпляра `MyClass`, но т.к. класс был превращен в singleton, то оба экземпляра ссылаются на один и тот же объект, и сравнение `a is b` выдает True.