Как бы реализовал паттерн singleton ?
Спросят с вероятностью 3%
Паттерн Singleton используется для того, чтобы создать класс, который имеет только один экземпляр. Это полезно, когда нужно ограничить количество объектов, например, для управления ресурсами (как подключение к базе данных) или для хранения глобального состояния.
Существует несколько способов реализовать Singleton. Рассмотрим один из наиболее распространенных способов - использование приватного конструктора и класса-метода для получения экземпляра.
Объяснение кода
1️⃣Приватный атрибут _instance
✅Этот атрибут используется для хранения единственного экземпляра класса.
2️⃣Метод __new__:
✅
✅Если экземпляр ещё не был создан,
3️⃣Метод init:
✅Методреализовалвызывается каждый раз при создании экземпляра. Чтобы избежать повторной инициализации, проверяем наличие атрибута
Можно также реализовать Singleton с помощью декоратора:
Объяснение
1️⃣Декоратор singleton:
✅Хранит экземпляры класса в словаре
✅Если экземпляра класса ещё нет в словаре, он создаётся и добавляется в словарь.
✅Возвращается существующий или новый экземпляр класса.
Паттерн Singleton гарантирует, что класс имеет только один экземпляр. Это достигается контролем создания экземпляров через методые
👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых
Спросят с вероятностью 3%
Паттерн Singleton используется для того, чтобы создать класс, который имеет только один экземпляр. Это полезно, когда нужно ограничить количество объектов, например, для управления ресурсами (как подключение к базе данных) или для хранения глобального состояния.
Существует несколько способов реализовать Singleton. Рассмотрим один из наиболее распространенных способов - использование приватного конструктора и класса-метода для получения экземпляра.
class Singleton:
__instance = None
def __new__(cls, args, kwargs):
if cls.__instance is None:
cls.__instance = super(Singleton, cls).__new__(cls, args, kwargs)
return cls.__instance
def __init__(self):
if not hasattr(self, 'initialized'):
self.initialized = True
# Инициализация объекта, если нужно
self.value = 0
# Проверка работы
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # Выведет: True
print(singleton1.value) # Выведет: 0
singleton1.value = 42
print(singleton2.value) # Выведет: 42
Объяснение кода
1️⃣Приватный атрибут _instance
_
:✅Этот атрибут используется для хранения единственного экземпляра класса.
2️⃣Метод __new__:
✅
__new__
- это метод, который создаёт новый экземпляр класса. Если экземпляр уже существует (cls.__instance
не None
), возвращается существующий экземпляр.✅Если экземпляр ещё не был создан,
super(Singleton, cls).__new__(cls, args, kwargs)
создаёт новый экземпляр и сохраняет его в cls.__instance
.3️⃣Метод init:
✅Методреализовалвызывается каждый раз при создании экземпляра. Чтобы избежать повторной инициализации, проверяем наличие атрибута
initialized
.Можно также реализовать Singleton с помощью декоратора:
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 SingletonClass:
def __init__(self):
self.value = 0
# Проверка работы
singleton1 = SingletonClass()
singleton2 = SingletonClass()
print(singleton1 is singleton2) # Выведет: True
print(singleton1.value) # Выведет: 0
singleton1.value = 42
print(singleton2.value) # Выведет: 42
Объяснение
1️⃣Декоратор singleton:
✅Хранит экземпляры класса в словаре
instances
.✅Если экземпляра класса ещё нет в словаре, он создаётся и добавляется в словарь.
✅Возвращается существующий или новый экземпляр класса.
Паттерн Singleton гарантирует, что класс имеет только один экземпляр. Это достигается контролем создания экземпляров через методые
None
), или декоратор. Singleton полезен для управления ресурсами и глобального состояния.👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых