Какие знаешь способы создания Singleton
Python
Middle
СБЕР Центр ИИ
Какие знаешь способы создания Singleton
Ответы
В Python Singleton можно реализовать несколькими способами. Основные подходы:
- **Через модуль** (самый простой):
Модули в Python и так являются синглтонами по своей природе.
```
# singleton.py
class _Singleton:
pass
instance = _Singleton()
```
- **Через декоратор**:
```
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class MyClass:
pass
```
- **Через метакласс**:
```
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 MyClass(metaclass=SingletonMeta):
pass
```
- **Через **new****:
```
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
```
Выбор способа зависит от конкретных требований. Модульный подход - самый простой, метаклассы дают больше контроля, а декораторы более гибкие.