Back to questions
Junior — Middle
74
Какие методы используются для реализации шаблона Singleton в коде?
Answer from AI
sobes.tech AI
Шаблон Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.
В Python есть несколько способов реализовать Singleton:
- Использование класса с приватным конструктором и статическим методом
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
- Использование декоратора
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
- Использование метакласса
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
Каждый из этих методов обеспечивает создание только одного экземпляра класса.